前言
这段时间在接触分布式的内容,由于本身比较熟悉rpc的原理,所以我顺其自然地选择了 dubbo 作为我学习的框架。
看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了,今天立下决心动笔了。
准备
必需
JAVA 环境
注册中心(我选用的是 nacos )非必需
maven / gradle(本文使用gradle构建)
docker
idea(这个应该是必需吧?当然也可以用记事本(滑稽.jpg))
正文
新建普通的 gradle 项目(不勾选任何选项)
新建三个module,分别命名为 Common,DubboProducer,DubboConsumer
- 模块作用
1 | Common -- 普通 gradle 项目,用于定义 proucer 以及 consumer 交互的接口以及规范 |
模块 gradle 定义
- 根项目 setting.gradle 新增
1
2
3include 'Common'
include 'DubboConsumer'
include 'DubboProducer'consumer 新增
- build.gradle 新增
1
2
3
4
5
6// 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 新增
1
includeFlat 'Common'
producer 新增
- build.gradle 新增
1
2
3
4
5
6// 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 新增
1
includeFlat 'Common'
模块配置文件
- consumer 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17spring:
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 配置文件
1
2
3
4
5
6
7
8dubbo:
registry:
address: nacos://cartoon-ali.com:8848
application:
name: dubbo-producer
protocol:
port: -1
name: dubbo启动类需同时使用 @EnableDubbo 修饰
- producer
1
2
3
4
5
6
7@SpringBootApplication
@EnableDubbo
public class DubboProducerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProducerApplication.class, args);
}
}- consumer
1
2
3
4
5
6
7
8
9@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
- 示例搭建(Hello World)
- 接口 DubboService构建
1 | public interface DubboService { |
- 服务提供类实现
1 | .apache.dubbo.config.annotation.DubboService |
注意:@Service 注解是 Srping 的注解,@org.apache.dubbo.config.annotation.Service 已在版本 2.7.7 被 @org.apache.dubbo.config.annotation.DubboService取代
- 消费者实现
1 |
|
dubbo 的服务消费应该在消费者中的 Service 层做整合消费后返回处理结果,这里仅为演示。
- 运行
先运行 provider 再运行 consumer,否则 dubbo 会因无法找到服务提供者自行关闭消费者。
- nacos 的结果
- 模拟调用
后记
虽然在网上已经有很多这方面的教程,但是大多是用 zookeeper 作为注册中心。
而个人喜欢接触新技术,nacos 在今年1月才由阿里开源出来。而且我比较喜欢 nacos 的界面风格,虽然 nacos 在功能上不如 zookeeper+dubboAdmin 强大,但是作为入门应该是足够的。
源码地址
本文所涉及代码都已上传到**github**
修改历史
- 2019 年 11 月 09 日
- 文章初始版本编写
- 2020 年 10 月 11 日
- 删减错误的描述
- 服务的消费方与生产方启动类都应添加 @EnableDubbo 注解,修改前为生产方启动类应添加 @EnableDubbo 注解
- 优化部分描述
- 第四点运行中的模拟调用不再使用 RestServices 进行调用,使用更为普遍的 postman 调用
- 优化 demo 的代码结构
- 使用 gradle 构建,修改前为 maven
- 使用多组件方式进行项目的构建,使 demo 不再局限于 demo,可成为更加常用的工具
- 删减错误的描述
本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/cartoon-blog/post/dubbo/dubbo与springboot的结合/