先继续上文divide插件各种功能体会
上一篇文章站重点看了下divide插件的处理大致流程未能体会各种规则设置后的表现形式
今天先配置体会一波如下。
-各种匹配条件的设置可以自行操作体会,eg:负载权重的设置,head 匹配条件设置,等
dubbo插件的功能体会
参考官网dubbo用户介绍:https://dromara.org/zh-cn/docs/soul/user-dubbo.html
- 先启动soul-example-alibaba-dubbo 模块 直接启动报错看日志需要zk注册中心
docker pull zookeeper
docker run -d -p 2181:2181 --name some-zookeeper --restart always 3487af26dee9```
-
启动成功
-
看soul-admin 中的变化跟预期的一样服务的初始配置规则已经同步到了admin
-
通过网关访问测试的dubbo接口(看到这里有个疑问:http请求直接访问到了dubbo服务,dubboplugin如何做的协议转换,需追踪源码)先看效果
➜ ~ curl 'http://localhost:9195/dubbo/findAll'
{"code":-107,"message":"Can not find selector, please check your configuration!","data":null}%
根据官网看插件状态也开启了 始终报错找不到selector
网关侧面报错 :请配置dubbo 对应的 applicationName ,怀疑dubbo的原数据信息没有同步到网关测
加断点在订阅原数据代码处:
public void onSubscribe(final MetaData metaData) {
if (RpcTypeEnum.DUBBO.getName().equals(metaData.getRpcType())) {
MetaData exist = META_DATA.get(metaData.getPath());
if (Objects.isNull(META_DATA.get(metaData.getPath())) || Objects.isNull(ApplicationConfigCache.getInstance().get(metaData.getPath()))) {
// The first initialization
ApplicationConfigCache.getInstance().initRef(metaData);
} else {
// There are updates, which only support the update of four properties of serviceName rpcExt parameterTypes methodName,
// because these four properties will affect the call of Dubbo;
if (!metaData.getServiceName().equals(exist.getServiceName())
|| !metaData.getRpcExt().equals(exist.getRpcExt())
|| !metaData.getParameterTypes().equals(exist.getParameterTypes())
|| !metaData.getMethodName().equals(exist.getMethodName())) {
ApplicationConfigCache.getInstance().build(metaData);
}
}
META_DATA.put(metaData.getPath(), metaData);
}
}
发现每个服务的描述原数据都有。。。。。
接下来 前几次的报错没有,之后在没有复现:
➜ soul git:(master) ✗ curl 'http://localhost:9195/dubbo/findAll'
{"code":200,"message":"Access to success!","data":{"name":"hello world Soul Alibaba Dubbo , findAll","id":"-980728747"}}%
网关侧错误
- 没有稳定复现,(自己猜测是同步原数据问题)因为为了进入到原数据断点,我为了方便直接点击了同步原数据,因为单独启动dubbo服务时候也会上报到网关侧
- 简单体会下dubbo插件的相关规则使用方法跟divide插件方式相同
- 执行流程跟divide 插件方式相同 断点加在 alibabaplugin 处理请求头跟返回数据处理位置
- 带着一开始的思考一个http请求如何调用dubbo服务 看到了执行入口
9.继续进入最终看到是通过dubbo泛化调用
总结
- 体验了dubbo插件的使用
- 过程中遇到的bug不能稳定复现,猜测跟自己机器的docker 启动的zk 与物理机的交互不稳定
- 本节重点就是带着如何把http请求,转成dubbo协议的疑问,简单看了下内部使用dubbo泛化来进行调用直接屏蔽掉共享接口的这种方式(记得课上对dubbo讲解时候说过)dubbo 泛化调用会破面向对的设计,可以后续深入研究
- 经过三天的对soul的体验跟简单的追踪执行流程,简单了解了执行流程,后续可以深入完整的挑选几个看下全流程,包含请求的发送与响应的处理,对具体执行流程涉及到的一些知识进行补齐