目录
今天是学习soul网关的第三天,今天的目标是使用soul项目提供的dubbo例子,同样业务项目中dubbo协议调用的服务可以接入soul网关。
一、dubbo服务接入网关
soul官方源码中,提供了dubbo协议服务的例子:
soul-examples-dubbo下soul-examples-alibaba-dubbo-service项目。先看下相关配置文件,application.yml下的配置与昨天学习http的例子几乎是一样,在此就不再赘述。运行TestAlibabaDubboApplication,这次启动报错了,根据出错提示无法连接zookeeper。启动zookeeper,然后运行TestAlibabaDubboApplication,这次启动成功。
测试是否成功接入网关,在Postman中测试:
没有请求成功,提示未找到对应的选择器,检查我们的配置。于是登录soul-admin查看:dubbo插件还关闭着,然后编辑,开启dubbo插件
因为 Soul Bootstrap 和 Soul Admin 暂时不支持插件修改的自动加载,所以我们此时需要手动重启下。再次请求:
总结:
根据以上的摸索,在dubbo协议的服务中,如何引入soul网关:
1、修改 pom.xml 文件,引入 soul-client-apache-dubbo 依赖,它是 Soul 对 Apache Dubbo 2.7.X 的集成支持。
<!-- 引入 Soul 针对 Dubbo 的集成的依赖 -->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-client-apache-dubbo</artifactId>
<version>2.1.2-RELEASE</version>
</dependency>
友情提示:如果使用 Alibaba Dubbo 2.6.X 的话,引入 soul-client-alibaba-dubbo 依赖。
2、在application.yml中,开启soul网关配置:
soul:
dubbo:
adminUrl: http://localhost:9095
contextPath: /dubbo
appName: dubbo
3、在业务调用接口使用@SoulDubboClient注解
二、源码分析
在soul-admin的元数据中,我们可以看到dubbo-example里面接口信息,对于soul网关来说这些就是每一个服务的元数据信息,网关根据我们的请求查找对应的元数据,对请求进行转发,过滤,负载,那么这些元数据是如何记录到soul中的?
在官方提供的dubbo-example中DubboTestService中可以发现@SoulDubboClient注解,查看SoulDubboClient注解,可以看到有path、ruleName、enable等字段,再看看哪里使用了该注解。
根据引用查找发现AlibabaDubboServiceBeanPostProcessor当中,引用了SoulDubboClient,并且发现了一段很重要的代码:
RegisterUtils.doRegister(buildJsonParams(serviceBean, soulDubboClient, method), url, RpcTypeEnum.DUBBO);
查看AlibabaDubboServiceBeanPostProcessor源码,我们了解到如下内容:
1、在onApplicationEvent中,获取业务项目中所有的@service注解的业务类;
2、获取业务类中带有@SoulDubboClient注解的方法;
3、根据SoulDubboClient注解的内容,通过RegisterUtils.doRegister()方法向soul-admin注册该方法。
这样我们也就知道,soul-admin是如何获取到这些元数据的。网关有了这些元数据,就可以对其进行相应的操作。那么,soul-admin又是如何通知Soul Bootstrap?
根据控制台打印的日志:
可以看到初始化dubbo引用的打印日志,那么就去查看ApplicationConfigCache源码。ApplicationConfigCache这里主要是缓存了业务接口的配置。再查看对应的引用可以找到:
然后再继续向上溯源,可以知道网关是以订阅的模式同步这些元数据,同步的方法就要查看对应的各类同步中心。
三、今天的学习分析、总结
- 通过对官方例子dubbo-example的使用,了解soul对dubbo服务的支持;
- 根据业务代码使用的SoulDubboClient入手,知道业务接口是如何注册到soul-admin;
- 之后再去思考soul-bootstrap又是如何同步业务的接口、网关设置信息;
- 如此不断的往上溯源很有意思,不过就是很容易很其他的类干扰,去了解其他的内容。
- 路漫漫,先针对一个内容点去深度了解,再慢慢去了解广度的知识。