dubbo接入参考文档
https://dromara.org/zh-cn/docs/soul/user-dubbo.html
体验基础的dubbo代理功能
1、启动ZooKeeper,默认2181端口
1.1、少了Bootstrap的pom依赖 alibaba dubbo
<!--soul alibaba dubbo plugin start-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-alibaba-dubbo</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${alibaba.dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
<!-- soul alibaba dubbo plugin end-->
1.2、配置文件
sync:
websocket :
urls: ws://localhost:9095/websocket
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000
2、启动 soul-examples-apache-dubbo-service 的 TestApacheDubboApplication
查看下控制台中的启动日志,启动在8011端口,已经注册上带 @SoulDubboClient 注解的服务,日志上面也可以看出dubbo注册的时候需要用到的属性
{
"appName": "dubbo",
"contextPath": "/dubbo",
"path": "/dubbo/findById",
"pathDesc": "Query by Id",
"rpcType": "dubbo",
"serviceName": "org.dromara.soul.examples.dubbo.api.service.DubboTestService",
"methodName": "findById",
"ruleName": "/dubbo/findById",
"parameterTypes": "java.lang.String",
"rpcExt": "{\\"group\\":\\"\\",\\"version\\":\\"\\",\\"loadbalance\\":\\"random\\",\\"retries\\":2,\\"timeout\\":10000,\\"url\\":\\"\\"}",
"enabled": true
}
2、请求url http://localhost:9195/dubbo/findById?id=1 发现走昨天的全部请求那边过了,保存的时候发现报错,Line 1 upstreamHost, upstreamUrl and weight can not be null,昨天保存的host,protocal,ip:port不见了,找了一下mysql中soul数据库,selector表中的handle字段不见了,是否哪里同步出了bug?暂时不知道哪里出问题了。。
3、发现插件忘记开启,开启插件,重新请求 http://localhost:9195/dubbo/findById?id=1 ,请求成功,返回如下
{
"code": 200,
"message": "Access to success!",
"data": {
"name": "hello world Soul Apache, findById",
"id": "1"
}
}
但是调用的时候,soul-bootstrap 报警告,这个是否是正常现象?需要后面看一下
2021-01-16 22:23:16.432 ERROR 7476 --- [-work-threads-4] o.d.soul.plugin.base.utils.CheckUtils : can not match selector data: divide
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-examples-dubbo-api</artifactId>
</dependency>
后续可以看的以及考虑的内容:
多参数和单参数调用有什么区别?
dubbo的元数据注册,通知,应该和http调用的配置同步是一致的,就是保存的地方不一样。
http代理也好,dubbo代理也好,首先是匹配选择器,然后是匹配规则,执行调用的整个过程(dubbo泛化调用)
以前都是自己写一个前端调用,调用dubbo的服务,如果直接使用Soul网关调用是否有什么弊端?
springboot-start是如何写的?
网关整个的思路就是做一个协议的转发,规则匹配什么的越快越好。