点击上方“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 注解方式实现微服务调用相关推荐

  1. dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

    今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...

  2. Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

    来自:阿里巴巴中间件 Photo @ Ilya Orehov 文 |刘军 从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面 ...

  3. c++ 使用nacos_为什么选用Nacos?虎牙直播微服务改造实践

    原标题:为什么选用Nacos?虎牙直播微服务改造实践 " 相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导"以技术驱动娱乐"的虎牙 ...

  4. 微服务架构:Nacos本地缓存 PK 微服务优雅下线

    前言 在上篇文章<微服务:剖析一下源码,Nacos的健康检查竟如此简单>中讲了当微服务突然挂掉的解放方案:调整健康检查周期和故障请求重试.朋友看了文章,建议再聊聊正常关闭服务时如何让微服务 ...

  5. springboot 之 微服务调用 之 链路追踪

    说明:本文来自 本篇主要内容 一.为什么要用链路追踪? 1.1 因:拆分服务单元 微服务架构其实是一个分布式的架构,按照业务划分成了多个服务单元. 由于服务单元的数量是很多的,有可能几千个,而且业务也 ...

  6. nacos使用_使用Nacos的CMDB实现微服务的就近访问!

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 juejin.cn/post/6892343440705585159 推荐:ht ...

  7. JSD-2204-Dubbo实现微服务调用-Seata-Day04

    1.Dubbo实现微服务调用 1.1确定调用关系 order模块调用stock模块的减少库存的功能 order模块调用cart模块的删除购物车的功能 business模块调用order新增订单的功能 ...

  8. 【Spring Cloud Alibaba】(二)微服务调用组件Feign原理+实战

    系列目录 [Spring Cloud Alibaba](一)微服务介绍 及 Nacos注册中心实战 本文目录 系列目录 前言 什么是RPC? Feign和OpenFeign都是什么? HTTP调用 v ...

  9. 微服务调用组件Feign实战

    文章目录 一.JAVA 项目中如何实现远程接口调用? 二.什么是Feign 2.2 Feign的优势 2.2 Feign的设计架构与底层原理源码 2.3 Ribbon&Feign对比 Ribb ...

最新文章

  1. 安装MYSQL最低的RAM_安装MySQL后,需要调整的10个性能配置项
  2. 杂项-权限管理:RBAC
  3. 获取父窗口元素或者获取iframe中的元素(相同域名下)
  4. java方法带参数返回值_Java方法中的参数太多,第6部分:方法返回
  5. 【Python 标准库学习】容器数据类型库 — collections
  6. Leaf服务器框架从入门到放弃(一)认识Leaf和安装Leaf环境
  7. pytorch统计矩阵非0的个数_矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法...
  8. 违背常识、颠覆认知,终于有人把薛定谔的猫讲明白了
  9. 【Java】环境变量配置
  10. 一张图学会python应用到excel-简单使用python做excel多文件批量搜索(带图形界面)(已更新)...
  11. 点对点协议(PPP)
  12. .net core 定时任务
  13. python参考手册小说_-精选版python 中文手册.pdf
  14. 刷吉米多维奇系列小结(一)
  15. Android 点击按钮,文本文字改变
  16. Python爬虫开发学习全教程第二版,爆肝十万字【建议收藏】
  17. 硬盘、光驱、刻录机维修技术
  18. 人工智能伦理学的一知半解
  19. ETest半实物仿真测试在汽车电子电器系统中的应用
  20. (10/300)二阶线性微分方程的解的性质和结构(二)

热门文章

  1. 蔡崇信完成对布鲁克林篮网和巴克莱中心的全资收购
  2. 鸽了!华米科技智能手表部分款将推迟开售 工艺太复杂了
  3. 全球首款5g全网通智能路由器华为5G CPE Pro发布 售价2499元
  4. 低至1999元!罗永浩最后的“信仰之作”再降价,真香还是真惨
  5. 荣耀20 Pro三色渲染图曝光:后置潜望式镜头+3D ToF镜头
  6. 三星S10+顶配版现身GeekBench:搭载Exynos 9820处理器
  7. 拳王虚拟项目公社:虚拟资源如何挣钱,小白月入过万的操作思路
  8. 为什么别人靠聊天找到了女朋友?因为他会这三招
  9. oracle的日志模式,Oracle数据日志模式
  10. openssl 基本算法小例