前文在 divide 插件的使用 中有介绍 Soul 网关通过插件支持不同的协议,本篇我们关注 dubbo 的使用。
dubbo 是一款开源分布式的 RPC 框架,目前是 RPC 框架的主流。本文关注在 Soul 网关下转发请求到 dubbo 框架的服务。
启动测试环境
ZooKeeper 启动
dubbo 的启动依赖配置中心,这里我们以推荐的 ZooKeeper 做为配置中心,所以我们首先启动 ZooKeeper。以 mac 系统下使用 homebrew 启动为例启动:
brew install zookeeper
brew services start zookeeper
ZooKeeper 启动后我们可以使用 zkCli 客户端工具查看 Zookeeper 的情况,在 zkCli 中使用 ls / 命令查看根节点的情况:
zkCli
# Connecting to localhost:2181
# Welcome to ZooKeeper!
#JLine support is enabled
# WATCHER::
# WatchedEvent state:SyncConnected type:None path:null
# [zk: localhost:2181(CONNECTED) 0]
ls /
# []
Soul 网关启动
在 Soul 网关使用的第一篇 源码编译和简单使用 中已经介绍了如何打包,这里我们直接启动 admin 和 bootstrap。
java -jar ./soul-admin/target/soul-admin.jar \
--spring.datasource.user='root' \
--spring.datasource.password='12345'
java -jar ./soul-bootstrap/target/soul-bootstrap.jar
启用 dubbo 插件
Soul 网关的 dubbo 插件默认是关闭的,因此我们需要到管理控制台(http://localhost:9095)启用 dubbo 插件,并同时关注我们的 Zookeeper 的配置是否正确。

插件管理 - dubbo
启动 soul-examples-apache-dubbo-service
Soul 分别为 apache-dubbo 和 alibaba-dubbo 提供了 demo,这里我们只演示 apache-dubbo。
# 编译 soul-examples-apache-dubbo-service
cd soul-examples/soul-examples-dubbo/soul-examples-apache-dubbo-service
mvn package -Dmaven.javadoc.skip=true -Dmaven.test.skip=true
# 启动 soul-examples-apache-dubbo-service
java -jar soul-examples-apache-dubbo-service-2.1.0.jar
通过启动日志,我们可以发现,dubbo 的服务和 http 的服务一样,都会在启动时通过 Soul admin 向网关注册自己提供的服务和规则。

dubbo 启动日志
在 Soul admin 的管理控制台我们可以看到这些规则已经注册成功:

管理控制台 - dubbo 的规则注册
通过 Soul 调用一下 dubbo 提供的服务
curl http://127.0.0.1:9195/dubbo/findAll
# 返回结果:
{"code":200,"message":"Access to success!","data":{"name":"hello world Soul Apache, findAll","id":"-1375543193"}}