soul网关学习(三)dubbo插件体验dubbo代理

先继续上文divide插件各种功能体会

上一篇文章站重点看了下divide插件的处理大致流程未能体会各种规则设置后的表现形式
今天先配置体会一波如下。在这里插入图片描述

-各种匹配条件的设置可以自行操作体会,eg:负载权重的设置,head 匹配条件设置,等

dubbo插件的功能体会

参考官网dubbo用户介绍:https://dromara.org/zh-cn/docs/soul/user-dubbo.html

  1. 先启动soul-example-alibaba-dubbo 模块 直接启动报错看日志需要zk注册中心
docker pull zookeeper
docker run -d -p 2181:2181 --name some-zookeeper --restart always 3487af26dee9```

  1. 启动成功
    在这里插入图片描述

  2. 看soul-admin 中的变化跟预期的一样服务的初始配置规则已经同步到了admin
    在这里插入图片描述

  3. 通过网关访问测试的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"}}%      
    

网关侧错误
在这里插入图片描述

  1. 没有稳定复现,(自己猜测是同步原数据问题)因为为了进入到原数据断点,我为了方便直接点击了同步原数据,因为单独启动dubbo服务时候也会上报到网关侧

  1. 简单体会下dubbo插件的相关规则使用方法跟divide插件方式相同
    在这里插入图片描述
  2. 执行流程跟divide 插件方式相同 断点加在 alibabaplugin 处理请求头跟返回数据处理位置
    在这里插入图片描述
  3. 带着一开始的思考一个http请求如何调用dubbo服务 看到了执行入口
    在这里插入图片描述
    9.继续进入最终看到是通过dubbo泛化调用
    在这里插入图片描述

总结

  1. 体验了dubbo插件的使用
  2. 过程中遇到的bug不能稳定复现,猜测跟自己机器的docker 启动的zk 与物理机的交互不稳定
  3. 本节重点就是带着如何把http请求,转成dubbo协议的疑问,简单看了下内部使用dubbo泛化来进行调用直接屏蔽掉共享接口的这种方式(记得课上对dubbo讲解时候说过)dubbo 泛化调用会破面向对的设计,可以后续深入研究
  4. 经过三天的对soul的体验跟简单的追踪执行流程,简单了解了执行流程,后续可以深入完整的挑选几个看下全流程,包含请求的发送与响应的处理,对具体执行流程涉及到的一些知识进行补齐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值