回顾
大家好,我是老马。
最近 dubbo3.x 在公司内部分享,于是想系统梳理一下。
总体思路是官方文档入门+一些场景的问题思考+源码解析学习。
https://cn.dubbo.apache.org/zh-cn/blog/2023/02/20/%E6%8C%87%E6%A0%87%E5%9F%8B%E7%82%B9/
本文为大家介绍了如何借助 Apache APISIX 实现 triple 协议代理,使用 nacos 作为注册中心。
关于如何用网关代理 triple 协议服务的原理介绍,请参见 HTTP 网关接入 一节文档。
本文我们使用 Apache APISIX + triple 协议 + Nacos 注册中心
的组合,演示如何使用 Apache APISIX 代理 Dubbo 服务。
示例应用说明
本示例完整源码与部署资源文件可查看 dubbo-samples-gateway-triple-apisix,示例架构图如下:
在该示例中定义并发布了一个 org.apache.dubbo.samples.gateway.apisix.DemoService
的 triple 服务,接口定义为:
1
2
3public interface DemoService {
String sayHello(String name);
}
接口实现如下:
1
2
3
4
5
6
7@DubboService
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
Dubbo服务相关配置:
1
2
3
4
5
6
7
8
9
10dubbo:
application:
name: gateway-apisix-triple
registry:
address: nacos://${nacos.address:127.0.0.1}:8848
username: nacos
password: nacos
protocol:
name: tri
port: 50052
部署应用
-
运行以下命令,启动 Dubbo 应用。
下载源码:
1
2$ 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
在 dubbo-samples-gateway-apisix-triple
目录,运行以下命令启动应用:
1$ mvn compile exec:java -Dexec.mainClass="org.apache.dubbo.samples.gateway.apisix.ProviderApplication"
运行以下命令,测试服务已经正常启动:
1
2
3
4curl \
--header "Content-Type: application/json" \
--data '["dubbo"]' \
http://localhost:50052/org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/
接入 APISIX 网关
本文档使用 Docker 安装 APISIX。确保本地先安装 Docker 和 Docker Compose。
首先,下载 apisix-docker 仓库。
1
2$ git clone https://github.com/apache/apisix-docker.git
$ cd apisix-docker/example
由于本示例要接入到 Nacos 注册中心,因此需要修改 apisix-docker/example
目录下安装用的 docker-compose.yaml
,添加如下 docker compose 配置内容:
1
2
3
4
5
6
7
8
9
10
11nacos:
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:
启动 APISIX 前,在 conf/config.yaml
文件中增加如下配置,让 APISIX 连接到 Nacos 注册中心:
1
2
3
4discovery:
nacos:
host:
- "http://192.168.33.1:8848"
最后使用 docker-compose
启用 APISIX:docker-compose -p docker-apisix up -d
。
配置服务源与路由
在 APISIX 中配置 Nacos upstream 及路由,即可实现后端实例地址自动发现(假设 APISIX 端口是 9080):
1
2
3
4
5
6
7
8
9curl 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"
}
}'
在上述命令中,请求头 X-API-KEY 是 Admin API 的访问 token,可以在 conf/config.yaml 文件中的 apisix.admin_key.key 查看。
验证服务调用
使用以下命令发送请求至需要配置的路由:
1curl -i http://127.0.0.1:9080/org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/
REST 模式
如果您觉得 /org.apache.dubbo.samples.gateway.apisix.DemoService/sayHello/
这样的 http 端口对于网关访问不够友好,可参考 为 triple 协议发布 rest 风格 http 接口。
参考资料
https://cn.dubbo.apache.org/zh-cn/blog/2023/01/30/dubbo3-%E5%BA%94%E7%94%A8%E7%BA%A7%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E8%AE%BE%E8%AE%A1/