Springboot+Dubbo+Nacos 注解方式实现微服务调用
点击上方“Java知音”,选择“置顶公众号”
技术文章第一时间送达!
作者:Sans_
juejin.im/post/5dc3f5116fb9a04a7d7719f1
一.项目结构
|-- 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注册中心
Nacos官方文档:
https://nacos.io/zh-cn/docs/quick-start.html
默认账号密码是nacos
三.搭建项目
Consumer和Provider的Maven依赖如下:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Base依赖 --><dependency><groupId>com.sans</groupId><artifactId>spring-boot-dubbo-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Dubbo依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.0</version></dependency><!-- Nacos依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>2.7.1</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.0.0</version></dependency>
</dependencies>
Consumer配置如下:
# 配置端口
server:port: 8862
dubbo:# 配置服务信息application:name: dubbo-consumer# 禁用QOS同一台机器可能会有端口冲突现象qos-enable: falseqos-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: falseqos-accept-foreign-ip: false# 配置注册中心registry:address: nacos://127.0.0.1:8848# 设置协议-协议由提供方指定消费方被动接受protocol:name: dubboport: 20880
spring:main:# 解决Bean重复定义问题allow-bean-definition-overriding: true
四.Base工程编写
编写DTO
/*** RPC接口DTO* 注意这里要实现序列化接口* @Author Sans* @CreateTime 2019/11/6 23:04*/
@Data
public class ProviderTestDTO implements Serializable {// IDprivate int id;// 名字private String name;// 序号private Integer number;
}
编写Serivce
/*** RPC接口* @Author Sans* @CreateTime 2019/11/6 23:03*/
public interface IProviderService {List<ProviderTestDTO> queryList();
}
编写返回结果类
/*** 返回结果类* 这里采用构建者模式构建* 优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理* @Author Sans* @CreateTime 2019/11/7 18:59*/
@Getter
public class ResultVO<T> implements Serializable {/*** 返回码*/private int code;/*** 返回信息*/private String message;/*** 返回数据*/private T data;/** 私有化构造器 **/private ResultVO() {}private ResultVO(ResultVO<T> resultVO) {this.code = resultVO.code;this.message = resultVO.message;this.data = resultVO.data;}/*** Build*/public static class Builder<T>{private ResultVO<T> 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<T> build(){return new ResultVO<>(resultVO);}}
}
五.Provider工程编写
在启动类上面不要忘记加上@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 {@Overridepublic List<ProviderTestDTO> 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<ProviderTestDTO> list = new ArrayList<>();list.add(testDTO1);list.add(testDTO2);return list;}
}
六.Consumer工程编写
和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远程调用注解@Referenceprivate IProviderService providerService;@RequestMapping(value = "/list",method = RequestMethod.GET)public ResultVO getList(){// 远程调用List<ProviderTestDTO> 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
END
Java面试题专栏
【40期】说一下线程池内部工作原理
【39期】Mybatis面试18问,你想知道的都在这里了!
【38期】一份tcp、http面试指南,常考点都给你了
【37期】请你详细说说类加载流程,类加载机制及自定义类加载器
【36期】说说 如何停止一个正在运行的线程?
【35期】谈谈你对Java线程之间通信方式的理解
【34期】谈谈为什么要拆分数据库?有哪些方法?
【33期】分别谈谈联合索引生效和失效的条件
【32期】你知道Redis的字符串是怎么实现的吗?
【31期】了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?应对措施是什么
我知道你 “在看”
Springboot+Dubbo+Nacos 注解方式实现微服务调用相关推荐
- dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用
今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...
- Dubbo 如何成为连接异构微服务体系的最佳服务开发框架
来自:阿里巴巴中间件 Photo @ Ilya Orehov 文 |刘军 从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面 ...
- c++ 使用nacos_为什么选用Nacos?虎牙直播微服务改造实践
原标题:为什么选用Nacos?虎牙直播微服务改造实践 " 相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导"以技术驱动娱乐"的虎牙 ...
- 微服务架构:Nacos本地缓存 PK 微服务优雅下线
前言 在上篇文章<微服务:剖析一下源码,Nacos的健康检查竟如此简单>中讲了当微服务突然挂掉的解放方案:调整健康检查周期和故障请求重试.朋友看了文章,建议再聊聊正常关闭服务时如何让微服务 ...
- springboot 之 微服务调用 之 链路追踪
说明:本文来自 本篇主要内容 一.为什么要用链路追踪? 1.1 因:拆分服务单元 微服务架构其实是一个分布式的架构,按照业务划分成了多个服务单元. 由于服务单元的数量是很多的,有可能几千个,而且业务也 ...
- nacos使用_使用Nacos的CMDB实现微服务的就近访问!
你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 juejin.cn/post/6892343440705585159 推荐:ht ...
- JSD-2204-Dubbo实现微服务调用-Seata-Day04
1.Dubbo实现微服务调用 1.1确定调用关系 order模块调用stock模块的减少库存的功能 order模块调用cart模块的删除购物车的功能 business模块调用order新增订单的功能 ...
- 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战
系列目录 [Spring Cloud Alibaba](一)微服务介绍 及 Nacos注册中心实战 本文目录 系列目录 前言 什么是RPC? Feign和OpenFeign都是什么? HTTP调用 v ...
- 微服务调用组件Feign实战
文章目录 一.JAVA 项目中如何实现远程接口调用? 二.什么是Feign 2.2 Feign的优势 2.2 Feign的设计架构与底层原理源码 2.3 Ribbon&Feign对比 Ribb ...
最新文章
- 安装MYSQL最低的RAM_安装MySQL后,需要调整的10个性能配置项
- 杂项-权限管理:RBAC
- 获取父窗口元素或者获取iframe中的元素(相同域名下)
- java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回
- 【Python 标准库学习】容器数据类型库 — collections
- Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
- pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...
- 违背常识、颠覆认知,终于有人把薛定谔的猫讲明白了
- 【Java】环境变量配置
- 一张图学会python应用到excel-简单使用python做excel多文件批量搜索(带图形界面)(已更新)...
- 点对点协议(PPP)
- .net core 定时任务
- python参考手册小说_-精选版python 中文手册.pdf
- 刷吉米多维奇系列小结(一)
- Android 点击按钮,文本文字改变
- Python爬虫开发学习全教程第二版,爆肝十万字【建议收藏】
- 硬盘、光驱、刻录机维修技术
- 人工智能伦理学的一知半解
- ETest半实物仿真测试在汽车电子电器系统中的应用
- (10/300)二阶线性微分方程的解的性质和结构(二)
热门文章
- 蔡崇信完成对布鲁克林篮网和巴克莱中心的全资收购
- 鸽了!华米科技智能手表部分款将推迟开售 工艺太复杂了
- 全球首款5g全网通智能路由器华为5G CPE Pro发布 售价2499元
- 低至1999元!罗永浩最后的“信仰之作”再降价,真香还是真惨
- 荣耀20 Pro三色渲染图曝光:后置潜望式镜头+3D ToF镜头
- 三星S10+顶配版现身GeekBench:搭载Exynos 9820处理器
- 拳王虚拟项目公社:虚拟资源如何挣钱,小白月入过万的操作思路
- 为什么别人靠聊天找到了女朋友?因为他会这三招
- oracle的日志模式,Oracle数据日志模式
- openssl 基本算法小例