This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication.

Use Apache APISIX to Proxy Dubbo Services (Triple Protocol)

This article introduces how to implement triple protocol proxy using Apache APISIX, with Nacos as the registry.

For a description of how to proxy triple protocol services with a gateway, please refer to the section on HTTP Gateway Access.

This article demonstrates how to use the combination of Apache APISIX + triple protocol + Nacos registry to proxy Dubbo services.

Sample Application Description

The complete source code and deployment resource files for this example can be found at dubbo-samples-gateway-triple-apisix, with the architecture diagram as follows:

In this example, a triple service org.apache.dubbo.samples.gateway.apisix.DemoService has been defined and published, with the interface defined as:

public interface DemoService {
	String sayHello(String name);
}

The interface implementation is as follows:

@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

Dubbo service-related configuration:

dubbo:
    application:
        name: gateway-apisix-triple
    registry:
        address: nacos://${nacos.address:127.0.0.1}:8848
        username: nacos
        password: nacos
    protocol:
        name: tri
        port: 50052

Deploy Application

  1. Download and start Nacos locally.

  2. Run the following command to start the Dubbo application.

Download the source code:

$ git clone -b master --depth 1 https://github.com/apache/dubbo-samples
$ cd dubbo-samples/2-advanced/dubbo-samples-gateway/dubbo-samples-gateway-apisix/dubbo-samples-gateway-apisix-triple

In the dubbo-samples-gateway-apisix-triple directory, run the following command to start the application:

$ mvn compile exec:java -Dexec.mainClass="org.apache.dubbo.samples.gateway.apisix.ProviderApplication"

Run the following command to test if the service has started normally:

curl \
    --header "Content-Type: application/json" \
    --data '["dubbo"]' \
    http://localhost:50052/org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/

Access APISIX Gateway

This document uses Docker to install APISIX. Ensure that Docker and Docker Compose are installed locally.

First, download the apisix-docker repository.

$ git clone https://github.com/apache/apisix-docker.git
$ cd apisix-docker/example

Since this example needs to connect to the Nacos registry, the docker-compose.yaml in the apisix-docker/example directory needs to be modified to add the following Docker Compose configuration:

  nacos:
    image: nacos/nacos-server:v2.1.1
    container_name: nacos-standalone
    environment:
    - PREFER_HOST_MODE=hostname
    - MODE=standalone
    ports:
    - "8848:8848"
    - "9848:9848"
    networks:
      apisix:

Before starting APISIX, add the following configuration to the conf/config.yaml file to connect APISIX to the Nacos registry:

discovery:
  nacos:
    host:
      - "http://192.168.33.1:8848"

Finally, enable APISIX using docker-compose: docker-compose -p docker-apisix up -d.

Configure Service Source and Route

Configure Nacos upstream and routes in APISIX to achieve automatic discovery of backend instance addresses (assuming the APISIX port is 9080):

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
    "uri": "/org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/",
    "upstream": {
        "service_name": "gateway-apisix-triple",
        "type": "roundrobin",
        "discovery_type": "nacos"
    }
}'

In the above command, the request header X-API-KEY is the access token for the Admin API, which can be found in the apisix.admin_key.key in the conf/config.yaml file.

Verify Service Call

Use the following command to send a request to the route that needs to be configured:

curl -i http://127.0.0.1:9080/org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/

REST Mode

If you find the HTTP port /org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/ not friendly enough for gateway access, refer to Publishing REST Style HTTP Interfaces for Triple Protocol.