目录

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相关推荐

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

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

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

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

  3. 微服务调用组件Feign:简介以及搭建环境

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  4. Spring cloud alibaba--Feign微服务调用组件

    目录 1.1Feign优势 2.spring cloud alibaba整合Feign 3.Spring Cloud Feign日志配置 4.Feign契约配置 5.Feign超时时间配置 6.Ope ...

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

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

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

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

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

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

  8. 微服务调用事项;分析Java微服务优点

    微服务调用事项 微服务=配置+流程+组件 微服务调用: 1.不要用api去调用api,比如report的实体类去继承collect实体类,容易导致有些接口情况出现report->collect, ...

  9. 微服务架构 与 Dubbo 微服务框架、SpringCloud 微服务框架 详解

    微服务架构 与 Dubbo 微服务框架.SpringCloud 微服务框架 详解 什么是微服务架构? 微服务架构就是将单体的应用程序分成多个应用程序,这一个应用程序就组成一个服务,这多个应用程序就组成 ...

  10. 微服务调用链追踪框架Skywalking,看完你就懂了!

    思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述 **skywalking**又是一个优秀的国产开源框 ...

最新文章

  1. 文档自动摘要及案例实现
  2. java多线程实现归并排序_利用多线程对数组进行归并排序
  3. linux下db2创建批量存储过程,DB2批量执行SQL脚本以及存储过程的实现
  4. 【Rsyslog】 从json 中通过正则 key 获取 value值,rsyslog正则匹配获取key 的 value值
  5. EasyX制作掩码图
  6. 分子排列不同会导致_生物信息遇上Deep learning(7): ReLeaSE--强化学习做药物分子设计...
  7. python子进程关闭fd_如果创建了multiprocessing.Pool,Python子进程wait()将失败
  8. phpexcel 导出循环增加列数_基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)...
  9. 关系数据库SQL语言核心功能
  10. python generator_Python Generator漫谈
  11. arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图
  12. 【CodeForces - 1060C】Maximum Subrectangle (思维,预处理前缀和,dp,枚举长度)
  13. 商汤科技-数据运维工程师-提前批笔试题目汇总
  14. html 价格计算,HTML打折计算价格实现原理与脚本代码
  15. cout输出格式不常用情况
  16. 项目本地发布到github并且上线可预览
  17. Intel CPU命名规则
  18. vant显示日期格式_使用Vant完成DatetimePicker 日期的选择器操作
  19. 基于单片机的智能家居环境监控系统的设计
  20. Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)

热门文章

  1. PyQt5 第六章 拖拽和绘画(二)
  2. 学Linux高性能Web集群,看这本书就够了
  3. 高等数学:对向量及其线性运算和数量积、向量积的见解
  4. Java中IO流的理解
  5. uos服务器系统rpm安装oracle 19c
  6. 云计算技术与应用 - 了解认识云计算
  7. 网银支付 加密解密说明
  8. LDA NCA: 降维与度量学习
  9. 一对一直播app源码开发的前端实现
  10. 海致大数据京信_海致网聚提出公安大数据背景下的个人计算新理念