Spring Boot整合Dubbo

1.环境依赖

Dubbo是一种嵌入式的去中心化的架构,其引入的依赖:

<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.8</version>
        </dependency>

maven依赖图

spring整合solr spring整合dubbo_dubbo

  1. dubbo: dubbo 功能集合
  • netty:网络传输
  • javassist:通过修改字节码,实现动态SPI机制

SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。

  • spring-context:与spring 集成
  • snakeyaml:解析yml配置文件
  1. zookeeper:连接zookeeper注册中心

2.基本开发架构

一个dubbo应用中至少包含3个节点:


订阅

远程调用

注册

dubbo-client

zookeeper

dubbo-server


  1. zookeeper注册中心
  2. dubbo-server:提供服务,并用dubbo暴漏服务到注册中心
  3. dubbo-client:通过dubbo引用远程服务,起到服务调用

1)zookeeper注册中心

这里作者使用了docker在安装完毕;

2)server暴露服务

  1. 在SpringBoot工程中添加依赖
<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
<!--如果注册中心用的zookeeper需要添加-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>2.7.8</version>
        </dependency>
  1. 在启动类上添加注解@EnableDubbo
  2. 在配置文件添加配置
dubbo.application.name=boot-server
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1 #由dubbo安排端口
  1. 在服务实现类上添加注解DubboService

3)client引用服务

1.在SpringBoot工程中添加依赖

2.在启动类上添加注解@EnableDubbo

3.在配置文件添加配置

dubbo.application.name=boot-client
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo #可不填
dubbo.protocol.port=-1 #由dubbo安排端口  #可不填

4.在需要引用服务的地方使用DubboReference引用远程服务(好像@AutoWire

@DubboReference
UserService userService

4)服务化最佳实践

分包:

建议将服务接口、服务模型、服务异常等均放在 API 包中,因为服务模型和异常也是 API 的一部分,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。

如果需要,也可以考虑在 API 包中放置一份 Spring 的引用配置,这样使用方只需在 Spring 加载过程中引用此配置即可。配置建议放在模块的包目录下,以免冲突,

为了代码结构能优雅一点,我们可以把需要暴露的服务和需要引用的服务做成一个依赖,供server和client引用。这样需要更改服务接口和实体类的时候,能减少一定的工作量。

我们常用的就是把Service层和Model进行封装成一个依赖。

server实现这个Service,并暴露到注册中心

client远程引用这个Service

3.Dubbo的配置项

https://dubbo.apache.org/zh/docs/v2.7/user/configuration/xml/

所有的配置项说明:

标签

用途

解释

<dubbo:service/>

服务配置(server)

用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

<dubbo:reference/>

引用配置(client)

用于创建一个远程服务代理,一个引用可以指向多个注册中心

<dubbo:protocol/>

协议配置(server)

用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

<dubbo:application/>

应用配置 (共有)

用于配置当前应用信息,不管该应用是提供者还是消费者

<dubbo:module/>

模块配置

用于配置当前模块信息,可选

<dubbo:registry/>

注册中心配置(共有)

用于配置连接注册中心相关信息

<dubbo:monitor/>

监控中心配置(共有)

用于配置连接监控中心相关信息,可选

<dubbo:provider/>

提供方配置(server)

当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:consumer/>

消费方配置(client)

当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

<dubbo:method/>

方法配置(共有)

用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

<dubbo:argument/>

参数配置(共有)

用于指定方法参数配置

1)配置分类

所有配置项分为三⼤类。

  1. 服务发现:表示该配置项⽤于服务的注册与发现,⽬的是让消费⽅找到提供⽅。
  2. 服务治理:表示该配置项⽤于治理服务间的关系,或为开发测试提供便利条件。
  3. 性能调优:表示该配置项⽤于调优性能,不同的选项对性能会产⽣影响。

2)配置的优先级

以 timeout 为例,下图显示了配置的查找顺序,其它配置 retries, loadbalance, actives 等类似:

  • 方法级优先,接口级次之,全局配置再次之。
  • 如果级别一样,则消费方优先,提供方次之。

其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

spring整合solr spring整合dubbo_spring整合solr_02