Soul网关源码学习系列之【Dubbo插件】

本文介绍了Soul网关中的Dubbo插件,该插件用于将HTTP协议转换为Dubbo协议,关键作用在于实现dubbo的泛化调用。内容包括Dubbo插件的基本概念、配合元数据的使用,以及针对apache dubbo和alibaba dubbo用户的适用性。文章焦点在于详细解析插件的代码实现,探讨Selector、Rule和Metadata的含义,并展示了核心处理逻辑和基于GenericService的泛化调用过程。
摘要由CSDN通过智能技术生成

Dubbo插件简介

  • dubbo插件是将http协议 转换成dubbo协议 的插件,也是网关实现dubbo泛化调用的关键。
  • dubbo插件需要配合元数据才能实现dubbo的调用。
  • apache dubbo 和 alibaba dubbo用户,都是使用该同一插件。
  • 想更详细了解,可以参考官方文档。我这里还是主要看一下其代码实现。

Dubbo插件代码实现

  • 在看代码之前,我们先了解一下Dubbo插件的数据格式是什么样的,同样Dubbo也是分了Selector和Rule,并且Dubbo还多了元数据的概念。下面就逐一查看一下。

    • Selector:这里面主要定义了请求中包含Url的匹配模式,以及加载顺序。
      在这里插入图片描述
    • Rule:就是进一步细化我们每一个接口的匹配规则。
      在这里插入图片描述
    • Metadata:这里面就是我们实际请求的接口,以及RPC的一些策略的东西了,这个是主要的信息。
      在这里插入图片描述
  • 接下来我们以soul-plugin-alibaba-dubbo为例,看一下里面的核心处理逻辑,参照代码注释:

    	@Override
        protected Mono<Void> doExecute(final ServerWebExchange exchange, final SoulPluginChain chain, final SelectorData selector, final RuleData rule) {
         
            String body = exchange.getAttribute(Constants.DUBBO_PARAMS); // Body里面主要就是我们的请求参数
            SoulContext soulContext = exchange.getAttribute(Constants.CONTEXT);
            assert soulContext != null;
            MetaData metaData = exchange.getAttribute(Constants.META_DATA); //拿到我们的MetaData
            if (!checkMetaData(metaData)) {
          // 判断元数据是否为空,以及里面的methodName和serviceName是不是为空
                assert metaData != null;
                log.error(" path is :{}, meta data have erro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值