零、前戏
首先启动一个dubbo的注册中心,zookeeper或是nacos都可以。
本文启动zookeeper,zookeeper不是本文的重点,
相关可以参考https://www.jianshu.com/p/5491d16e6abd
https://www.cnblogs.com/peng-28/archive/2004/01/13/13402584.html
./zkServer.sh start // 开启服务
./zkServer.sh stop // 停止服务
./zkServer.sh status // 查看服务状态
tail -f zookeeper.out // 持续打印日志
整个调用过程http-->网关-->dubbo provider如图所示:
通过dubbo的范化调用,实现的dubbo的转发,ApplicationConfigCache
范化调用小知识点
下面我们开始一步步搞起,dubbo的网关代理
一、soul-admin添加dubbo插件及相关操作
在soul-admin在 soul-admin
--> 插件管理-> dubbo
设置为开启,并配置zookeeper注册中心地址。
soul数据库添加元数据表meta_data
默认soul-admin初始化启动时已添加,用于存储注册的dubbo元数据
CREATE TABLE `meta_data` (
`id` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'id',
`app_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'application name',
`path` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'path, cannot be repeated',
`path_desc` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'path description',
`rpc_type` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'rpc type',
`service_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'service name',
`method_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'method name',
`parameter_types` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'parameter types are provided with multiple parameter types separated by commas',
`rpc_ext` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'rpc extended information, json format',
`date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'create time',
`date_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'update time',
`enabled` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'enabled state',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
每一个dubbo方法,对应一条元数据,可以在 soul-admin -->元数据管理,进行查看。
路径(path):就是你http请求的路径
rpc扩展参数(rpc_ext):对应为dubbo接口的一些配置,调整的化,请在这里修改,支持json格式
{"timeout":10000,"group":"",version":"","loadbalance":"","retries":1}
二、依赖引入
soul-bootstrap添加依赖
- alibaba dubbo项目,添加依赖如下,dubbo换成自己项目当前版本
<!--soul alibaba dubbo plugin start-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId>
<version>${last.version}</version>
</dependency>
<!-- soul alibaba dubbo plugin end-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
- apache dubbo,添加依赖如下,dubbo换成自己项目当前版本
<!--soul apache dubbo plugin start-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-apache-dubbo</artifactId>
<version>${last.version}</version>
</dependency>
<!--soul apache dubbo plugin end-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
<!-- Dubbo Nacos registry dependency start -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.4</version>
</dependency>
<!-- Dubbo Nacos registry dependency end-->
<!-- Dubbo zookeeper registry dependency start-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
<!-- Dubbo zookeeper registry dependency end -->
注:如果使用启动服务时报错 KeeperErrorCode = Unimplemented for /dubbo,可以参照https://www.cnblogs.com/peng-28/p/13402584.html调整下jar依赖
dubbo服务引入soul的client
- alibaba dubbo 用户
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-client-alibaba-dubbo</artifactId>
<version>${last.version}</version>
</dependency>
yml中添加配置
soul:
dubbo:
adminUrl: http://localhost:9095
contextPath: /dubbo
appName: dubbo
# adminUrl: 为你启动的soul-admin 项目的ip + 端口,注意要加 http://
# contextPath: 为你的这个项目在soul网关的路由前缀,这个你应该懂意思把? 比如/order ,/product 等等,网关会根据你的这个前缀来进行路由.
# appName:你的应用名称,不配置的话,会默认取 dubbo配置中application 中的名称
三、调用参数的说明
通过http post方式访问网关,通过body,json类型传递,以java bean参数类型
多参数类型支持,在soul-bootstrap中的yaml 配置中新增如下配置:
soul :
dubbo :
parameter: multi
通过@SoulDubboClient,注册接口,可在dubbo插件中查看
常见定义调用:
- 单个参数,基本数据类型
- javabean
- 多参数
- 没有参数-- 传入{}
关于参数具体的解析可以参考
四、心得与体会
- 因为zookeeper版本与soul不一致的问题,导致soul项目启动失败,倒是演练了一把“断点调试法+猜想法”,粗略的趟了一遍流程,也算塞翁失马吧
- dubbo范化调用还是挺好玩的,很像spi的写法
- 日拱一卒,每天进步一点点