Dubbo与SpringBoot的结合

前言

这段时间在接触分布式的内容,由于本身比较熟悉rpc的原理,所以我顺其自然地选择了 dubbo 作为我学习的框架。
看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了,今天立下决心动笔了。

准备

必需
JAVA 环境
注册中心(我选用的是 nacos )

非必需
maven / gradle(本文使用gradle构建)
docker
idea(这个应该是必需吧?当然也可以用记事本(滑稽.jpg))

正文

  1. 新建普通的 gradle 项目(不勾选任何选项)
  2. 新建三个module,分别命名为 Common,DubboProducer,DubboConsumer
  • 模块作用
Common -- 普通 gradle 项目,用于定义 proucer 以及 consumer 交互的接口以及规范
DubboProducer -- Spring Boot 本地项目,用于为 Common 中定义的服务接口创建实体类
DubboConsumer -- Spring Boot web 项目,接收用户请求,调用 producer 处理请求并返回结果
  • 模块 gradle 定义

    • 根项目 setting.gradle 新增
    include 'Common'
    include 'DubboConsumer'
    include 'DubboProducer'
    
    • consumer 新增

      • build.gradle 新增
      // https://mvnrepository.com/artifact/org.apache.dubbo/dubbo
      compile group: 'org.apache.dubbo', name: 'dubbo', version: '2.7.8'
      // https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-registry-nacos
      compile group: 'org.apache.dubbo', name: 'dubbo-registry-nacos', version: '2.7.8'
      // https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client
      compile group: 'com.alibaba.nacos', name: 'nacos-client', version: '1.3.3'
      
    • setting.gradle 新增

    includeFlat 'Common'
  • producer 新增

    • build.gradle 新增
    // https://mvnrepository.com/artifact/org.apache.dubbo/dubbo
    compile group: 'org.apache.dubbo', name: 'dubbo', version: '2.7.8'
    // https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-registry-nacos
    compile group: 'org.apache.dubbo', name: 'dubbo-registry-nacos', version: '2.7.8'
    // https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client
    compile group: 'com.alibaba.nacos', name: 'nacos-client', version: '1.3.3'
    
    • setting.gradle 新增
    includeFlat 'Common'
    
  • 模块配置文件

    • consumer 配置文件
    spring:
      application:
        name: dubbo-consumer
      cloud:
        nacos:
        discovery:
        server-addr: cartoon-ali.com
    dubbo:
    protocol:
        port: -1
        name: dubbo
      registry:
        address: nacos://cartoon-ali.com:8848
      cloud:
        subscribed-services: dubbo-spring-cloud-provider
      application:
        name: consumer
    
    • producer 配置文件
    dubbo:
      registry:
        address: nacos://cartoon-ali.com:8848
      application:
        name: dubbo-producer
      protocol:
        port: -1
        name: dubbo
    
  • 启动类需同时使用 @EnableDubbo 修饰

    • producer
    @SpringBootApplication
    @EnableDubbo
    public class DubboProducerApplication {
    	public static void main(String[] args) {
            SpringApplication.run(DubboProducerApplication.class, args);
      	}
    }
    
    • consumer
    @SpringBootApplication
    @EnableDubbo
    public class DubboConsumerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DubboConsumerApplication.class, args);
        }
    
    }
    
  1. 示例搭建(Hello World)
  • 接口 DubboService构建
public interface DubboService {

    String say();
}
  • 服务提供类实现
@org.apache.dubbo.config.annotation.DubboService
@Service
public class DubboServiceImpl implements DubboService {

    @Override
    public String say() {
        return "dubbo producer";
    }

}

注意:@Service 注解是 Srping 的注解,@org.apache.dubbo.config.annotation.Service 已在版本 2.7.7 被 @org.apache.dubbo.config.annotation.DubboService取代

  • 消费者实现
@RestController
public class TestController {

    @DubboReference
    private DubboService dubboService;

    @RequestMapping("/test")
    public String test(){
        return dubboService.say();
    }
}

dubbo 的服务消费应该在消费者中的 Service 层做整合消费后返回处理结果,这里仅为演示。

  1. 运行

先运行 provider 再运行 consumer,否则 dubbo 会因无法找到服务提供者自行关闭消费者。

  • nacos 的结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KfF5Wr6S-1602355147965)(https://upload-images.jianshu.io/upload_images/10343139-9be5aab30e04cb11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  • 模拟调用

image

后记

虽然在网上已经有很多这方面的教程,但是大多是用 zookeeper 作为注册中心。
而个人喜欢接触新技术,nacos 在今年1月才由阿里开源出来。而且我比较喜欢 nacos 的界面风格,虽然 nacos 在功能上不如 zookeeper+dubboAdmin 强大,但是作为入门应该是足够的。

源码地址

本文所涉及代码都已上传到**github**

修改历史

  1. 2019 年 11 月 09 日
    1. 文章初始版本编写
  2. 2020 年 10 月 11 日
    1. 删减错误的描述
      1. 服务的消费方与生产方启动类都应添加 @EnableDubbo 注解,修改前为生产方启动类应添加 @EnableDubbo 注解
    2. 优化部分描述
      1. 第四点运行中的模拟调用不再使用 RestServices 进行调用,使用更为普遍的 postman 调用
    3. 优化 demo 的代码结构
      1. 使用 gradle 构建,修改前为 maven
      2. 使用多组件方式进行项目的构建,使 demo 不再局限于 demo,可成为更加常用的工具

本文首发于cartoon的博客

转载请注明出处:https://cartoonyu.github.io/cartoon-blog/post/dubbo/dubbo与springboot的结合/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值