运行sole下面的soul-examples-dubbo服务

272 阅读3分钟

本篇文章介绍soul对dubbo的插件支持,以及dubbo服务接入soul网关。官方文档可以参考:dromara.org/zh-cn/docs/…

dubbo服务接入soul网关步骤

1、启动sole-admin。登陆localhost:9095, 进入System Manage -> Plugin, 把插件dubbo开启。

2、启动soul-bootstrap

  1. 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>
  1. Application-local.xml 添加对应配置
soul:
    sync:
        zookeeper:
            url: localhost:2181
            sessionTimeout: 5000
            connectionTimeout: 2000
  1. 启动zookeeper

    安装zookeeper

    > brew install zookeeper
    

    查看配置文件 缺省的配置文件在以下目录中

    > cd /usr/local/etc/zookeeper/
    

    启动服务

    > zkServer start
    
  2. 启动SoulBootstrapApplication

3、启动sole-examples-alibaba-dubbo-service,

  1. 运行TestAlibabaDubboApplication

  2. 发现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 里面注册数据
    1. 我们看到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 里面的信息。

    2. soul-spring-boot-starter-client-alibaba-dubbo 里面的spring.factories、spring.provides、SoulAlibabaDubboClientConfiguration的注解 可以看出,启动时会自动加载SoulAlibabaDubboClientConfiguration。加载里面的@Bean配置,把配置的sole 相关的dubbo信息配置到AlibabaDubboServiceBeanPostProcessor。

    3. soul-spring-boot-starter-client-alibaba-dubbo 的pom.xml 文件里面又加了对soul-client-alibaba-dubbo的依赖。 我们看soul-client-alibaba-dubbo,发现了两个很关键的类 AlibabaDubboClientValidator 和 AlibabaDubboServiceBeanPostProcessor。 其中 AlibabaDubboServiceBeanPostProcessor实现了ApplicationListener 并实现了onApplicationEvent方法,onApplicationEvent方法的作用是当容器初始化完成之后,处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等,我们该项目加载Bean后的核心初始化操作也在里面,这个类我们重点关注,并打断点一会进行验证。

    4. 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网关调用服务的具体流程。