YuXuan
发布于 2020-08-05 / 20 阅读
0

Nacos + Sentinel + Dubbo 三剑合璧

改造消费者微服务和提供者微服务,删除OpenFeign 和 Ribbon,使⽤Dubbo RPC 和 Dubbo LB
⾸先,需要删除或者注释掉⽗⼯程中的热部署依赖

<!--热部署-->
<!--<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>-->

服务提供者⼯程改造

-提取dubbo服务接⼝⼯程,service-dubbo-api
接⼝类

package com.cloud.service;

public interface xxxService {
  Integer findDefaultByUserId(Long userId);
}
  • 改造提供者⼯程
    1)pom⽂件添加spring cloud + dubbo整合的依赖,同时添加dubbo服务接⼝⼯程依赖
<!--spring cloud alibaba dubbo 依赖-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel-apache-dubbo-adapter</artifactId>
</dependency>
<!--dubbo 服务接⼝依赖-->
<dependency>
  <groupId>com.cloud</groupId>
  <artifactId>service-dubbo-api</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

2)删除原有Service接⼝,引⼊dubbo服务接⼝⼯程中的Service接⼝,适当调整代码,在service的实现类上添加dubbo的@Service注解
image.png
3)application.yml或者bootstrap.yml配置⽂件中添加dubbo配置

dubbo:
  scan:
    # dubbo 服务扫描基准包
    base-packages: com.cloud.service.impl
  protocol:
    # dubbo 协议
    name: dubbo
    # dubbo 协议端⼝( -1 表示⾃增端⼝,从 20880 开始)
    port: -1
  registry:
    # 挂载到 Spring Cloud 的注册中⼼
    address: spring-cloud://localhost

另外增加⼀项配置

spring:
  main:
    # Spring Boot 2.1 需要设置
    allow-bean-definition-overriding: true

4)运⾏发布之后,会发现Nacos控制台已经有了服务注册信息,从元数据中可以看出,是dubbo注册上来的

服务消费者⼯程改造

接下来改造服务消费者⼯程

  • pom.xml中删除OpenFeign相关内容
  • application.yml配置⽂件中删除和Feign、Ribbon相关的内容;代码中删除Feign客户端内容;
  • pom.xml添加内容和服务提供者⼀样
  • application.yml配置⽂件中添加dubbo相关内容
dubbo:
  registry:
    # 挂载到 Spring Cloud 注册中⼼
    address: spring-cloud://localhost
  cloud:
    # 订阅服务提供⽅的应⽤列表,订阅多个服务提供者使⽤ "," 连接
    subscribed-services: service-provider

同样,也配置下spring.main.allow-bean-definition-overriding=true

  • Controller代码改造,使用dubbo的@Reference注入,其他不变
  • 运⾏发布之后,同样会发现Nacos控制台已经有了服务注册信息
  • 测试Controller中的方法,即接口
    image.png