说明

把已经有的feign接口直接改成通过dubbo协议直接调用

Dubbo Spring Cloud 提供了方案,即 @DubboTransported 注解,支持在类,方法,属性上使用。能够帮助服务消费端的 Spring Cloud Open Feign 接口以及 @LoadBalanced RestTemplate Bean 底层走 Dubbo 调用(可切换 Dubbo 支持的协议),而服务提供方则只需在原有 @RestController 类上追加 Dubbo @Servce 注解(需要抽取接口)即可,换言之,在不调整 Feign 接口以及 RestTemplate URL 的前提下,实现无缝迁移。

代码案例

代码来自 图灵学院, 我自己学完,做了个作业,然后给老师的代码整理了一下,加了个注释啥的.

代码地址和使用

https://gitee.com/zjj19941/ZJJ_Dubbo/tree/master/spring-cloud-alibaba-dubbo-feign

1.执行sql脚本
2.准备nacos服务端
3.修改配置文件地址
4.启动项目,先启动pringCloudDubboProviderUserFeignApplication , 再启动SpringCloudDubboConsumerUserFeignApplication
5.postman执行调用方法
localhost:8080/user/list 这个是http调用
localhost:8080/user/list2 这个是dubbo调用
localhost:8080/user/list3 这个是RestTemplate基于dubbo协议调用

修改服务提供者

@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//@DubboTransported(protocol = "dubbo") //思考dubbo协议是否生效?  Spring  单例模式   不生效private UserFeignService userFeignService;/*** feign调用* localhost:8080/user/list*/@RequestMapping("/list")public List<User> list() {return userFeignService.list();}@Autowiredprivate UserDubboFeignService userDubboFeignService;/*** dubbo调用* localhost:8080/user/list2*/@RequestMapping("/list2")public List<User> list2() {return userDubboFeignService.list();}@Autowiredprivate RestTemplate restTemplate;@Bean@LoadBalanced@DubboTransportedpublic RestTemplate restTemplate() {return new RestTemplate();}/*** dubbo通过RestTemplate调用* localhost:8080/user/list3*/@RequestMapping("/list3")public List<User> list3() {String url = "http://spring-cloud-dubbo-provider-user-feign/user/list";return restTemplate.getForObject(url, List.class);}}

Feign从http调用改成基于dubbo协议调用相关推荐

  1. C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)

    出处:https://www.cnblogs.com/SunSpring Twain 随着扫描仪.数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值.然而,支持 ...

  2. matexs不支持鸿蒙,华为mateXs为何从兼容安卓改成基于安卓,是鸿蒙不行还是另有隐情...

    科学技术是第一生产力,这句话大家应该都很熟悉了.而在这个时代没有核心技术就意味着发展的命门是在别人的手里.尤其是现在是一个网络社会,无论是无人驾驶还是远程医疗等等都里不可网络技术,而5G作为网络技术现 ...

  3. [MFC]将基于对话框的工程改成基于BCG的

    Step1 stdafx.h 加入如下内容.BCGCBProInc.h间接导入了lib. #include <BCGCBProInc.h> // BCGControlBar Pro#if ...

  4. 基于Dubbo协议的接口测试

    一.Dubbo协议 Dubbo架构的接口一般有四大模块: provider:服务提供方,给注册中心和监控方提供服务 registry:注册中心 zookeeper,接收消费方和服务提供方提供的服务 C ...

  5. discuz的ajax,discuz分页函数改成基于jqueryd的ajax分页函数

    /** *AJAX分页 *$num 为总共的条数   比如说这个分类下共有15篇文章 *$perpage为每页要显示的条数 *$curpage为当前的页数 *$url为请求路径, *$obj为html ...

  6. 改来改去把微服务改成了分布式单体

    昨晚睡前,撸了几个群聊的聊天记录.发现一个很有意思的名词"分布式单体",顺藤摸瓜翻了一下聊天记录,大致内容就是某公司在做微服务改造,但改成了四不像,形式上像微服务,本质上依然是单体 ...

  7. Android之基于XMPP协议即时通讯软件(一)

    为什么80%的码农都做不了架构师?>>>    文章开头,先打一下广告咯,今年误打误撞,侥幸进入2013CSDN博客之星候选,目前排名已经有点不堪入目,所以,谨希望广大基友们动动手指 ...

  8. dubbo调用超时回滚_微服务痛点基于Dubbo + Seata的分布式事务(AT模式)

    前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...

  9. postman如何改成中文版_在 Windows 上如何用 Postman 重现 Dubbo 反序列化漏洞

    Dubbo 2.7.5 以下的版本暴出了一个反序列化漏洞,那么如何在 windows 上重现这个漏洞呢? 1. 下载官方 demo 代码(暴出的漏洞是 http 协议的,故使用 http 的 demo ...

最新文章

  1. [Enterprise Library]Configuration类设计分析
  2. 信号与线性系统分析_什么是线性系统?如何辨别控制系统?控制系统基本要求是什么?...
  3. 数据结构(一)---顺序表的实现---java版
  4. 指针常量与常量指针精解【一次掌握】
  5. 小学计算机制作表格教案,小学信息技术《表格的制作》教案
  6. Python变量、脚本名称、函数命名规范
  7. Spring :事务使用的注意事项
  8. Redis配置优化和使用
  9. java中的银行界面开发_ATM机银行项目java图形界面
  10. python写连点脚本_python鼠标连点器-测试版
  11. 【解决】简单有效的使用lodop打印小票功能
  12. 腾讯云支付系统架构介绍
  13. Win32API编程_切换窗口
  14. 多渔:赚钱,就是专注和刻意练习!
  15. 以太镇火了,快卖掉手中的猫买楼吧
  16. 用递归+缓存求阶乘和排列组合数
  17. 手把手教你实现热力图!
  18. 2012年9月9日参加中国软件开发者大会学习笔记
  19. 入坑codewars
  20. 互联网寒冬——“大裁员”

热门文章

  1. 创造历史的 20 个决定
  2. win7 安装oracle11g 数据库服务器
  3. 手撕 Golang 高性能内存缓存库 bigcache! #4
  4. 邮轮IPTV系统航线介绍天气船长等介绍快速搭建方案
  5. 【GIS作业报告】上海房价分布三维渔网图
  6. WSUS微软下载地址
  7. 卖网课的怎么引流?卖网课去哪个平台好?卖网课如何推广?
  8. mit协议C语言,MIT Scheme 的基本使用
  9. inux系统用户名和全名有什么区别
  10. FAT16介绍与结构