点击上方“Java之间”,选择“置顶或者星标”
你关注的就是我关心的!
来源:juejin.im/post/5dc3f5116fb9a04a7d7719f1
上一篇:一个丧心病狂的Github项目:东北话编程,大写的服!
|-- spring-boot-dubbo-demo (父级工程)
|-- spring-boot-dubbo-base (基础工程)
|-- spring-boot-dubbo-consumer (消费者)
|-- spring-boot-dubbo-provider (生产者)
SpringBoot版本:2.2.0
Dubbo版本:2.7.0
Nacos版本:1.1.4
Nacos官方文档:
https://nacos.io/zh-cn/docs/quick-start.html
默认账号密码是nacos
Consumer和Provider的Maven依赖如下:
org.springframework.boot
spring-boot-starter-web
com.sans
spring-boot-dubbo-base
0.0.1-SNAPSHOT
org.apache.dubbo
dubbo-spring-boot-starter
2.7.0
org.apache.dubbo
dubbo
2.7.0
org.apache.dubbo
dubbo-registry-nacos
2.7.1
com.alibaba.nacos
nacos-client
1.0.0
Consumer配置如下:
# 配置端口
server:
port: 8862
dubbo:
# 配置服务信息
application:
name: dubbo-consumer
# 禁用QOS同一台机器可能会有端口冲突现象
qos-enable: false
qos-accept-foreign-ip: false
# 配置注册中心
registry:
address: nacos://127.0.0.1:8848
# 设置超时时间
consumer:
timeout: 4000
spring:
main:
# 解决Bean重复定义问题
allow-bean-definition-overriding: true
Provider配置如下:
# 配置端口
server:
port: 8861
dubbo:
# 配置服务信息
application:
name: dubbo-provider
# 禁用QOS同一台机器可能会有端口冲突现象
qos-enable: false
qos-accept-foreign-ip: false
# 配置注册中心
registry:
address: nacos://127.0.0.1:8848
# 设置协议-协议由提供方指定消费方被动接受
protocol:
name: dubbo
port: 20880
spring:
main:
# 解决Bean重复定义问题
allow-bean-definition-overriding: true
编写DTO
/**
* RPC接口DTO
* 注意这里要实现序列化接口
* @Author Sans
* @CreateTime 2019/11/6 23:04
*/
@Data
public class ProviderTestDTO implements Serializable {
// ID
private int id;
// 名字
private String name;
// 序号
private Integer number;
}
编写Serivce
/**
* RPC接口
* @Author Sans
* @CreateTime 2019/11/6 23:03
*/
public interface IProviderService {
List queryList();
}
编写返回结果类
/**
* 返回结果类
* 这里采用构建者模式构建
* 优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理
* @Author Sans
* @CreateTime 2019/11/7 18:59
*/
@Getter
public class ResultVO implements Serializable {
/**
* 返回码
*/
private int code;
/**
* 返回信息
*/
private String message;
/**
* 返回数据
*/
private T data;
/** 私有化构造器 **/
private ResultVO() {}
private ResultVO(ResultVO resultVO) {
this.code = resultVO.code;
this.message = resultVO.message;
this.data = resultVO.data;
}
/**
* Build
*/
public static class Builder{
private ResultVO resultVO;
public Builder() {
resultVO = new ResultVO<>();
}
public Builder code(int code){
resultVO.code = code;
return this;
}
public Builder message(String message){
resultVO.message = message;
return this;
}
public Builder data(T data){
resultVO.data = data;
return this;
}
public ResultVO build(){
return new ResultVO<>(resultVO);
}
}
}
在启动类上面不要忘记加上@EnableDubbo注解
@EnableDubbo //开启Dubbo的注解支持
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
实现IProviderService接口,注意这里的Serivce引用的是dubbo的包
/**
* 生产者Dubbo接口实现
* @Author Sans
* @CreateTime 2019/11/6 23:01
*/
@Service
public class ProviderServiceImpl implements IProviderService {
@Override
public List queryList() {
// 初始化数据
ProviderTestDTO testDTO1 = new ProviderTestDTO();
testDTO1.setId(1);
testDTO1.setName("学生");
testDTO1.setNumber(100);
ProviderTestDTO testDTO2 = new ProviderTestDTO();
testDTO2.setId(2);
testDTO2.setName("教师");
testDTO2.setNumber(101);
// 组装数据
List list = new ArrayList<>();
list.add(testDTO1);
list.add(testDTO2);
return list;
}
}
和Provider工程的启动类一样,加上@EnableDubbo注解
@EnableDubbo //开启dubbo的注解支持
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
编写测试接口
/**
* 消费测试接口
* @Author Sans
* @CreateTime 2019/11/6 23:09
*/
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
// Dubbo远程调用注解
@Reference
private IProviderService providerService;
@RequestMapping(value = "/list",method = RequestMethod.GET)
public ResultVO getList(){
// 远程调用
List providerTestDTOList = providerService.queryList();
return new ResultVO.Builder<>().code(200).message("success").data(providerTestDTOList).build();
}
}
启动Provider工程和Consumer工程,这个时候Nacos会有对应的服务
使用Postman访问Consumer测试接口
码云:
https://gitee.com/liselotte/spring-boot-dubbo-demo
GitHub:
https://github.com/xuyulong2017/my-java-demo
最近热文阅读:
1、一个丧心病狂的Github项目:东北话编程,大写的服!
2、IDEA 插件推荐: EasyCode一键生成所需代码~
3、小心避坑:MySQL分页时使用 limit+order by 会出现数据重复问题
4、注意!Apache Dubbo 这几个版本出现严重安全漏洞
5、大名鼎鼎的LVS:常见的三种负载均衡方式比较!
6、IntelliJ IDEA 的 2020 ,很牛皮!(破音)
7、终于有人把 Nginx 说清楚了,图文详解!
8、一条简单的更新语句,MySQL是如何加锁的?
9、推荐几个IDEA插件,Java开发者撸码利器
10、Java8很香但还是想升级到Java11,教你怎么从Java8升级到Java11
关注公众号,你想要的Java都在这里