我的架构梦:(四十七) 第二代 Spring Cloud核心组件之Nacos+Sentinel+Dubbo三剑合璧

第二代 Spring Cloud核心组件之Nacos+Sentinel+Dubbo三剑合璧

    • 一、前言
    • 二、服务提供者工程改造
    • 三、 服务消费者工程改造

一、前言

改造自动投递微服务简历微服务,删除OpenFeignRibbon,使用Dubbo RPCDubbo LB

首先,需要删除或者注释掉父工程中的热部署依赖。




自动投递微服务:riemann-service-autodeliver-nacos-sentinel-dubbo-8100
简历微服务:riemann-service-resume-nacos-sentinel-dubbo-8085

二、服务提供者工程改造

1、提取dubbo服务接口工程,riemann-service-dubbo-api

接口类

public interface ResumeService {
     

    Integer findDefaultResumeByUserId(Long userId);

}

2、改造提供者工程(简历微服务)


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-dubboartifactId>
dependency>
<dependency>
    <groupId>com.alibaba.cspgroupId>
    <artifactId>sentinel-apache-dubbo-adapterartifactId>
dependency>

<dependency>
    <groupId>com.riemanngroupId>
    <artifactId>riemann-service-dubbo-apiartifactId>
    <version>1.0-SNAPSHOTversion>
dependency>

3、删除原有ResumeService接口,引入dubbo服务接口工程中的ResumeService接口,适当调整代码,在service的实现类上添加dubbo@Service注解

@Service // dubbo的注解
public class ResumeServiceImpl implements ResumeService {
     

    @Autowired
    private ResumeDao resumeDao;

    @Override
    public Integer findDefaultResumeByUserId(Long userId) {
     
        Resume resume = new Resume();
        resume.setUserId(userId);
        // 查询默认简历
        resume.setIsDefault(1);
        Example<Resume> example = Example.of(resume);
        return resumeDao.findOne(example).get().getIsOpenResume();
    }

}

4、application.yml或者bootstrap.yml配置文件中添加dubbo配置

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

另外增加一项配置

我的架构梦:(四十七) 第二代 Spring Cloud核心组件之Nacos+Sentinel+Dubbo三剑合璧_第1张图片
5、运行发布之后,会发现Nacos控制台已经有了服务注册信息,从元数据中可以看出,是dubbo注册上来的

我的架构梦:(四十七) 第二代 Spring Cloud核心组件之Nacos+Sentinel+Dubbo三剑合璧_第2张图片

三、 服务消费者工程改造

接下来改造服务消费者工程—>自动投递微服务

  • pom.xml中删除OpenFeign相关内容

  • application.yml配置文件中删除和FeignRibbon相关的内容;代码中删除Feign客户端内容

  • pom.xml添加内容和服务提供者一样

  • application.yml配置文件中添加dubbo相关内容

    dubbo:
      registry:
        # 挂载到 Spring Cloud 注册中心
        address: spring-cloud://localhost
      cloud:
        # 订阅服务提供方的应用列表,订阅多个服务提供者使用 "," 连接
        subscribed-services: riemann-service-resume
    

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

  • Controller代码改造,其他不变

    @RestController
    @RequestMapping("/autodeliver")
    public class AutodeliverController {
           
    
        // 引入dubbo的注解,远程RPC调用
        @Reference
        private ResumeService resumeService;
    
        @GetMapping("/checkState/{userId}")
        @SentinelResource(value = "findResumeOpenState", blockHandlerClass = SentinelFallbackClass.class,
                blockHandler = "handleException", fallback = "handleError", fallbackClass = SentinelFallbackClass.class)
        public Integer findResumeOpenState(@PathVariable Long userId) {
           
            return resumeService.findDefaultResumeByUserId(userId);
        }
    
    }
    
  • 运行发布之后,同样会发现Nacos控制台已经有了服务注册信息

  • 测试:localhost:8100/autodeliver/checkState/1545132 (我新复制了一个工程,占用端
    口8100)

    我的架构梦:(四十七) 第二代 Spring Cloud核心组件之Nacos+Sentinel+Dubbo三剑合璧_第3张图片

你可能感兴趣的:(我的架构梦)