【SpringCloudAlibaba】微服务组件Dubbo
文章目录
- 1. provider端配置
- 2. consumer端配置
- 3. 从Open Feign迁移到Dubbo
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.cry.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);}
}
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();}
}
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);}}
【SpringCloudAlibaba】微服务组件Dubbo相关推荐
- 微服务入门篇(二),万字长文带你实操作SpringCloudAlibaba微服务组件
目录 SpringCloudAlibaba介绍 简介 为什么要学SpringCloudAlibaba 从Spring Cloud netflix 到 Spring Cloud Alibaba 功能组件 ...
- SpringCloud及SpringCloudAlibaba微服务组件
目录 1 微服务架构概述 什么是微服务 服务注册中心: 服务调用: 服务调用2: 服务降级: 服务网关: 服务配置: 服务总线: 1 微服务架构概述 什么是微服务 微服务是一种架构模式,他提倡将单一应 ...
- 读书笔记-SpringCloudAlibaba微服务原理与实战-谭锋-【未完待续】
SpringCloudAlibaba微服务原理与实战 谭锋 电子工业出版社 ISBN-9787121388248 仅供参考, 自建索引, 以备后查 一.应用架构演进.微服务发展史 1.单体架构 一般来 ...
- Alibaba微服务组件Sentinel
Alibaba微服务组件Sentinel 1.分布式系统遇到的问题 服务的可用性问题 提供系统可用性的关键是在相关组件失效情况下,系统能多快恢复并继续正确提供服务.当服务器挂掉的时候首先想到什么原 ...
- 2:Alibaba微服务组件Nacos注册中心
Spring Cloud Alibaba系列目录 提示:这里是第二章:Alibaba微服务组件Nacos注册中心 微服务和Spring Cloud Alibaba介绍 Alibaba微服务组件Naco ...
- 8.10Dubbo框架里的微服务组件
title date comments categories tags permalink Dubbo框架里的微服务组件 2020/4/28 true 微服务 微服务 8.10 今天以开源微服务框架 ...
- 微服务组件记事本:Skywalking的ES索引 · 收藏篇
(2021年倒计时33天) 书接上文,在上回书中,我们说到了<微服务组件记事本:Skywalking执行效果 · 多图篇>,文章比较详细的展示了Skywalking中的各种数据和图表展示, ...
- MongoDB的RestAPI微服务组件--Mongo-Rest介绍
MongoDB的RestAPI微服务组件--Mongo-Rest介绍 开源项目:https://gitee.com/yunwisdoms/mongodb-rest 安装 使用npm安装: npm in ...
- 微服务 注册中心的作用_微服务架构Dubbo之注册中心(Zookeeper)
注册中心简介 在微服务架构中,注册中心是核心的基础服务之一.在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中.Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用 ...
- docker -v 文件夹下没有数据_微服务就是Dubbo?并没有那么简单!微服务架构+Docker+k8s了解下...
微服务算是面试中非常高频的词汇了! 之前我就遇到一个候选人,我问他微服务是什么,他说:"微服务就是 Dubbo--",然后把 Dubbo 的原理说的清清楚楚.回答的我都动心了,我猜 ...
最新文章
- 搜索引擎技术之概要预览
- 优点和阵列的缺点,并且一个链表
- 有大佬通过研发这款Chrome插件的使用教程,赚了上百万! 网友:互联网的钱太好赚了~...
- 【tensorflow】OP_REQUIRES failed at variable_ops.cc:104 Already exists: Resource
- 阿里巴巴 Java 开发手册之编程规约(一)-------我的经验
- 3、假设有一个对象数组,想根据某个对象属性对数组进行排序时
- excel公式 某一个单元格等于另一个单元格的值_15个excel小技巧,简单易学,一看就会,收藏备用吧...
- Demo能为游戏带来什么?
- matlab矩阵处理实验报告,matlab实验报告一二三
- 计算机计算资源估计,项目时间管理中的计算题三点估算和关键路径法
- 梦记录:1204(梦到观世音菩萨像)
- python填充nan_Python Pandas Dataframe填充NaN值
- 增大图片(在图像分割、GAN、超分辨中经常用到)
- CSS SVG开关按钮切换网页白天和夜晚
- VSCode Remote SSH 过程试图写入的管道不存在
- 订单超过 7 天不允许退货
- linux抓包pppoe,pppoe抓包流程和拨号流程
- vue 禁止input输入框输入特殊字符和汉字
- 如何判断一棵树是否是满二叉树
- php团购实现,团购网站的设计与实现(PHP,MySQL)(含录像)
热门文章
- Learn Git Branching 学习笔记(关于origin和它的周边——Git远程仓库高级操作篇)
- JAVA_HOME is not defined correctly
- catia圆角交点如何标注_Catia怎么使用凸台和倒圆角命令?
- GVR-Cardboard_DayDream
- python爬取二手房信息,基于python爬取链家二手房信息代码示例
- Bitmovin首席执行官Stefan:开发者正在构建视频产品的未来
- 学区摇号软件设计_小升初:多校划片与单校划片,2020年小摇号最全解析!
- 圣剑传说 玛娜传奇(Legend of Mana)(LOM)全武器取得方法
- perl Data::Dumper和Storable的例子
- 春天里,阳光下,无限的哀思和想念