八:微服务调用组件Dubbo
目录
1. Spring Cloud整合Dubbo
1.1 provider端配置
1.2 consumer端配置
1.3 从Open Feign迁移到Dubbo
1. Spring Cloud整合Dubbo
1.1 provider端配置
引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
application.yml
dubbo:scan:# 指定 Dubbo 服务实现类的扫描基准包base-packages: com.tuling.mall.user.service
# application:
# name: ${spring.application.name}protocol:# dubbo 协议name: dubbo# dubbo 协议端口( -1 表示自增端口,从 20880 开始)port: -1
# registry:
# #挂载到 Spring Cloud 注册中心 高版本可选
# address: spring-cloud://127.0.0.1:8848spring:application:name: spring-cloud-dubbo-provider-usermain:# Spring Boot2.1及更高的版本需要设定allow-bean-definition-overriding: truecloud:nacos:# Nacos 服务发现与注册配置discovery:server-addr: 127.0.0.1:8848
服务实现类上配置@DubboService暴露服务
@DubboService
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> list() {return userMapper.list();}@Overridepublic User getById(Integer id) {return userMapper.getById(id);}
}
1.2 consumer端配置
引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
application.yml
dubbo:cloud:# 指定需要订阅的服务提供方,默认值*,会订阅所有服务,不建议使用subscribed-services: spring-cloud-dubbo-provider-user
# application:
# name: ${spring.application.name}protocol:# dubbo 协议name: dubbo# dubbo 协议端口( -1 表示自增端口,从 20880 开始)port: -1
# registry:
# #挂载到 Spring Cloud 注册中心 高版本可选
# address: spring-cloud://127.0.0.1:8848spring:application:name: spring-cloud-dubbo-consumer-usermain:# Spring Boot2.1及更高的版本需要设定allow-bean-definition-overriding: truecloud:nacos:# Nacos 服务发现与注册配置discovery:server-addr: 127.0.0.1:8848
当应用使用属性dubbo.cloud.subscribed-services为默认值时,日志中将会输出警告:
服务消费方通过@DubboReference引入服务
@RestController
@RequestMapping("/user")
public class UserConstroller {@DubboReferenceprivate UserService userService;@RequestMapping("/info/{id}")public User info(@PathVariable("id") Integer id){return userService.getById(id);}@RequestMapping("/list")public List<User> list(){return userService.list();}
}
1.3 从Open Feign迁移到Dubbo
Dubbo Spring Cloud 提供了方案,即 @DubboTransported 注解,支持在类,方法,属性上使用。能够帮助服务消费端的 Spring Cloud Open Feign 接口以及 @LoadBalanced RestTemplate Bean 底层走 Dubbo 调用(可切换 Dubbo 支持的协议),而服务提供方则只需在原有 @RestController 类上追加 Dubbo @Servce 注解(需要抽取接口)即可,换言之,在不调整 Feign 接口以及 RestTemplate URL 的前提下,实现无缝迁移。
修改服务提供者
@DubboService
@Slf4j
@RestController
@RequestMapping("/user")
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Override@RequestMapping("/list")public List<User> list() {log.info("查询user列表");return userMapper.list();}@Override@RequestMapping("/getById/{id}")public User getById(@PathVariable("id") Integer id) {return userMapper.getById(id);}
}
服务消费端引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
feign的实现,启动类上添加@EnableFeignClients
@SpringBootApplication
@EnableFeignClients
public class SpringCloudDubboConsumerUserFeignApplication {public static void main(String[] args) {SpringApplication.run(SpringCloudDubboConsumerUserFeignApplication.class, args);}}
feign接口添加 @DubboTransported 注解
@FeignClient(value = "spring-cloud-dubbo-provider-user-feign",path = "/user")
@DubboTransported(protocol = "dubbo")
public interface UserDubboFeignService {@RequestMapping("/list")public List<User> list();@RequestMapping("/getById/{id}")public User getById(@PathVariable("id") Integer id);
}@FeignClient(value = "spring-cloud-dubbo-provider-user-feign",path = "/user")
public interface UserFeignService {@RequestMapping("/list")public List<User> list();@RequestMapping("/getById/{id}")public User getById(@PathVariable("id") Integer id);
}
调用对象添加 @DubboTransported 注解
@RestController
@RequestMapping("/user")
public class UserConstroller {@DubboReferenceprivate UserService userService;@RequestMapping("/info/{id}")public User info(@PathVariable("id") Integer id){return userService.getById(id);}@Autowired@DubboTransportedprivate UserFeignService userFeignService;@RequestMapping("/list")public List<User> list(){return userFeignService.list();}@Autowiredprivate UserDubboFeignService userDubboFeignService;@RequestMapping("/list2")public List<User> list2(){return userDubboFeignService.list();}@Autowiredprivate RestTemplate restTemplate;@Bean@LoadBalanced@DubboTransportedpublic RestTemplate restTemplate() {return new RestTemplate();}@RequestMapping("/list3")public List<User> list3(){String url = "http://spring-cloud-dubbo-provider-user-feign/user/list";return restTemplate.getForObject(url, List.class);}}
八:微服务调用组件Dubbo相关推荐
- 【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 ...
- 微服务调用组件Feign:简介以及搭建环境
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Spring cloud alibaba--Feign微服务调用组件
目录 1.1Feign优势 2.spring cloud alibaba整合Feign 3.Spring Cloud Feign日志配置 4.Feign契约配置 5.Feign超时时间配置 6.Ope ...
- dubbo consumer 端口_基于Springboot+Dubbo+Nacos 注解方式实现微服务调用
今天跟大家分享基于Springboot+Dubbo+Nacos 注解方式实现微服务调用的知识. 1 项目结构 |-- spring-boot-dubbo-demo (父级工程) |-- spring- ...
- JSD-2204-Dubbo实现微服务调用-Seata-Day04
1.Dubbo实现微服务调用 1.1确定调用关系 order模块调用stock模块的减少库存的功能 order模块调用cart模块的删除购物车的功能 business模块调用order新增订单的功能 ...
- springboot 之 微服务调用 之 链路追踪
说明:本文来自 本篇主要内容 一.为什么要用链路追踪? 1.1 因:拆分服务单元 微服务架构其实是一个分布式的架构,按照业务划分成了多个服务单元. 由于服务单元的数量是很多的,有可能几千个,而且业务也 ...
- 微服务调用事项;分析Java微服务优点
微服务调用事项 微服务=配置+流程+组件 微服务调用: 1.不要用api去调用api,比如report的实体类去继承collect实体类,容易导致有些接口情况出现report->collect, ...
- 微服务架构 与 Dubbo 微服务框架、SpringCloud 微服务框架 详解
微服务架构 与 Dubbo 微服务框架.SpringCloud 微服务框架 详解 什么是微服务架构? 微服务架构就是将单体的应用程序分成多个应用程序,这一个应用程序就组成一个服务,这多个应用程序就组成 ...
- 微服务调用链追踪框架Skywalking,看完你就懂了!
思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述 **skywalking**又是一个优秀的国产开源框 ...
最新文章
- 文档自动摘要及案例实现
- java多线程实现归并排序_利用多线程对数组进行归并排序
- linux下db2创建批量存储过程,DB2批量执行SQL脚本以及存储过程的实现
- 【Rsyslog】 从json 中通过正则 key 获取 value值,rsyslog正则匹配获取key 的 value值
- EasyX制作掩码图
- 分子排列不同会导致_生物信息遇上Deep learning(7): ReLeaSE--强化学习做药物分子设计...
- python子进程关闭fd_如果创建了multiprocessing.Pool,Python子进程wait()将失败
- phpexcel 导出循环增加列数_基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)...
- 关系数据库SQL语言核心功能
- python generator_Python Generator漫谈
- arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图
- 【CodeForces - 1060C】Maximum Subrectangle (思维,预处理前缀和,dp,枚举长度)
- 商汤科技-数据运维工程师-提前批笔试题目汇总
- html 价格计算,HTML打折计算价格实现原理与脚本代码
- cout输出格式不常用情况
- 项目本地发布到github并且上线可预览
- Intel CPU命名规则
- vant显示日期格式_使用Vant完成DatetimePicker 日期的选择器操作
- 基于单片机的智能家居环境监控系统的设计
- Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)