本篇文章介绍soul对dubbo的插件支持,以及dubbo服务接入soul网关。官方文档可以参考:dromara.org/zh-cn/docs/…
dubbo服务接入soul网关步骤
1、启动sole-admin。登陆localhost:9095, 进入System Manage -> Plugin, 把插件dubbo开启。
2、启动soul-bootstrap
- pom.xml引入对应jar包,添加对dubbo插件的支持
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-apache-dubbo</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-client</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
- Application-local.xml 添加对应配置
soul:
sync:
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000
-
启动zookeeper
安装zookeeper
> brew install zookeeper查看配置文件 缺省的配置文件在以下目录中
> cd /usr/local/etc/zookeeper/启动服务
> zkServer start -
启动SoulBootstrapApplication
3、启动sole-examples-alibaba-dubbo-service,
-
运行TestAlibabaDubboApplication
-
发现sole-admin后台 System-Manage -> Metadata 里面注册上的dubbo的相关数据, PluginList -> dubbo 也有了对应的dubbo-service 加了注解@SoulDubboClient的的SelectorList 和 RuleList.
4、我们通过sole-bootstrap访问dubbo请求
http://localhost:9195/dubbo/findById?id=666 访问结果如下:
{
"code": 200,
"message": "Access to success!",
"data": {
"name": "hello world Soul Alibaba Dubbo, findById",
"id": "666"
}
}
使用sole网关访问dubbo服务正常。
部分源码讲解
sole-examples-alibaba-dubbo-service 启动时如何往sole-admin 里面注册数据
-
我们看到sole-examples-alibaba-dubbo-service 启动时不仅会注册自己的服务,还会往sole-admin里面注册数据。注册数据具体是怎么实现的呢?通过sole-examples-alibaba-dubbo-service项目的分析,我们发现pom.xml 添加的对 soul-spring-boot-starter-client-alibaba-dubbo 的依赖,启动时会加载 soul-spring-boot-starter-client-alibaba-dubbo 里面的信息。
-
soul-spring-boot-starter-client-alibaba-dubbo 里面的spring.factories、spring.provides、SoulAlibabaDubboClientConfiguration的注解 可以看出,启动时会自动加载SoulAlibabaDubboClientConfiguration。加载里面的@Bean配置,把配置的sole 相关的dubbo信息配置到AlibabaDubboServiceBeanPostProcessor。
-
soul-spring-boot-starter-client-alibaba-dubbo 的pom.xml 文件里面又加了对soul-client-alibaba-dubbo的依赖。 我们看soul-client-alibaba-dubbo,发现了两个很关键的类 AlibabaDubboClientValidator 和 AlibabaDubboServiceBeanPostProcessor。 其中 AlibabaDubboServiceBeanPostProcessor实现了ApplicationListener 并实现了onApplicationEvent方法,onApplicationEvent方法的作用是当容器初始化完成之后,处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等,我们该项目加载Bean后的核心初始化操作也在里面,这个类我们重点关注,并打断点一会进行验证。
-
soul-client-alibaba-dubbo 的pom.xml 也添加了对soul-client-common、soul-client-dubbo-common的依赖,我们从这两个 model 的名字可以看出是基础配置的项目,我们进入项目看后也确是如此,这里不做详细介绍。
到这里,我们基本弄清楚了sole-examples-alibaba-dubbo-service 的启动流程,接下来我们通过重启该项目来验证sole-examples-alibaba-dubbo-service 在启动时如何往sole-admin里面注册数据的。
-
debug分析结果
通过看代码和dubug我们发现,sole-examples-alibaba-dubbo-service 启动时加载的最核心的类就是 AlibabaDubboServiceBeanPostProcessor。 AlibabaDubboServiceBeanPostProcessor实现了ApplicationListener接口并实现了onApplicationEvent方法,onApplicationEvent方法的作用是当容器初始化完成之后,处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等, 该项目这里也是用于处理sole-examples-alibaba-dubbo-service启动时加载各种Bean后注册相关数据的核心操作,在onApplicationEvent方法里面把sole-examples-alibaba-dubbo-service里面添加@Service 的类全部拿出来,遍历进行各种操作,最后调用sole-admin的http://localhost:9095/soul-client/dubbo-register 方法注册到sole-admin 里面。 今天的分析就先到这里,下节课我们讲分析下通过sole网关调用服务的具体流程。