springboot2.x整合dubbo3(一)

之前在springboot2.x入门专栏里写过最近再带着团队改造一个历史产物项目,进行spring mvc 单体应用向springboot2.x+dubbo3的整改。这里说下为什么选择dubbo,而不用spring cloud,仅仅是因为这个项目组的成员们对dubbo2比较熟悉,其实针对这种中小型项目,我是比较倾向于能够快速成型的spring cloud,但是无奈有时间要求,所以就直接dubbo3了。

写这个小专辑是因为网上关于 springboot2.x整合dubbo3的文章太少了,好多还是用的已经不建议使用的版本,jar包哐哐往pom里面引,能跑起来但是一堆jar包冲突就发文章出来误导人了,所以我感觉我必须要站出来了。

本次小专辑会分为3篇

1)springboot2.x整合dubbo3.x

内容: dubbo成为Apache顶级项目之后,之前的com.alibaba的包已经不建议使用了,但是网上关于org.apache.dubbo的使用要么pom里面天花乱坠,要么就是老版本新版本混着来,看着相当难受。这篇就用最简单的配置,最简洁的说明完成dubbo3的整合。

2)springboot 聚合项目创建,pom文件、dependencyManagemet详解

内容:这里为什么会插一篇关于maven的文章,是因为在项目过程中感觉大家除了专注于编码对其他的事情知之甚少了,这样怎么能够独挡一面呢。所以我就遇到啥就给大家渗透啥吧。这一篇里会给大家详细讲解如何去建父子项目,如何利用pom里的插件控制打包的环境,如何利用dependencyManagemet统一管理包版本

3)springboot2.x整合dubbo3利用Filter实现traceId的传递

内容:微服务没有链路追踪怎么能行,靠肉眼判别是哪个请求吗?这篇就讲解了最简单的链路追踪实现,利用dubbo.rpc.filter来实现rpc的链路标识传递。

接下来我们就来进入今天的主题,springboot2.x整合dubbo3,看之前我先说一下,我也不图你不洗澡,我也不图你岁数大,我就图你们的点赞评论转发。

1.项目结构

springboot2.x整合dubbo3(一)_第1张图片

今天不展开讲这个聚合项目的创建过程,下一篇会讲,api是放的service,common是放的公用方法,consumer是放的消费者,provider是放的服务提供者。

2.服务提供者 


        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.apache.dubbo
            dubbo-spring-boot-starter
        

        
            org.apache.curator
            curator-x-discovery
        

        
            com.s8d
            common
        

        
            com.s8d
            api
        

    

我们需要把common和依赖进来,对于dubbo的整合我们只需要dubbo-spring-boot-starter和curator-x-discovery即可,

2.curator介绍

Apache Curator是一个比较完善的ZooKeeper客户端框架,通过封装的一套高级API 简化了ZooKeeper的操作。通过查看官方文档,可以发现Curator主要解决了三类问题:

  • 封装ZooKeeper client与ZooKeeper server之间的连接处理
  • 提供了一套Fluent风格的操作API
  • 提供ZooKeeper各种应用场景(recipe, 比如:分布式锁服务、集群领导选举、共享计数器、缓存机制、分布式队列等)的抽象封装

Curator主要从以下几个方面降低了zk使用的复杂性:

  • 重试机制:提供可插拔的重试机制, 它将给捕获所有可恢复的异常配置一个重试策略,并且内部也提供了几种标准的重试策略(比如指数补偿)
  • 连接状态监控: Curator初始化之后会一直对zk连接进行监听,一旦发现连接状态发生变化将会作出相应的处理
  • zk客户端实例管理:Curator会对zk客户端到server集群的连接进行管理,并在需要的时候重建zk实例,保证与zk集群连接的可靠性
  • 各种使用场景支持:Curator实现了zk支持的大部分使用场景(甚至包括zk自身不支持的场景),这些实现都遵循了zk的最佳实践,并考虑了各种极端情况

yml配置

server:
  port: 9104
dubbo:
  application:
    name: provider
  protocol:
    name: dubbo
    port: 21880
  registry:
    protocol: zookeeper
    address: 192.168.174.128:2181
    timeout: 20000
  version: 1.0.0
  scan:
    base-packages: com.s8d.provider

 service实现类编写

import com.s8d.api.service.TestService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class TestServiceImpl implements TestService {

    @Override
    public String test() {
        return "success";
    }
}

这里我们平时写的service换成了DubboService

到这里服务提供者的全部代码就已经完成了,服务消费者的pom和提供者的是一致的,我就不放出来了,yml配置稍有不同,见下方

3.服务消费者

server:
  port: 9103
dubbo:
  application:
    name: consumer
  registry:
    protocol: zookeeper
    address: 192.168.174.128:2181
    timeout: 20000
  version: 1.0.0
  scan:
    base-packages: com.s8d.consumer

调用服务提供者

@RestController
public class TestController {
    @DubboReference
    TestService testService;

    @GetMapping("test")
    public String test() {
        return testService.test();
    }

}

在调用的时候,之前我们用@Resource替换为@DubboReference

4.测试

springboot2.x整合dubbo3(一)_第2张图片

打开dubbo-admin,我们可以看到已经成功注册了。

springboot2.x整合dubbo3(一)_第3张图片 

使用postman,也能看到正确的回执, springboot2.x整合dubbo3就是这么简单。

大家有问题可以关注我的公众号:codesls可以获取文章内容的源码,回复s8d即可。 

你可能感兴趣的:(dubbo,spring,boot,微服务)