Feign从http调用改成基于dubbo协议调用
说明
把已经有的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协议调用相关推荐
- C#基于Twain协议调用扫描仪,设置多图像输出模式(Multi image output)
出处:https://www.cnblogs.com/SunSpring Twain 随着扫描仪.数码相机和其他图像采集设备的引入,用户热切地发现了将图像整合到他们的文档和其他工作中的价值.然而,支持 ...
- matexs不支持鸿蒙,华为mateXs为何从兼容安卓改成基于安卓,是鸿蒙不行还是另有隐情...
科学技术是第一生产力,这句话大家应该都很熟悉了.而在这个时代没有核心技术就意味着发展的命门是在别人的手里.尤其是现在是一个网络社会,无论是无人驾驶还是远程医疗等等都里不可网络技术,而5G作为网络技术现 ...
- [MFC]将基于对话框的工程改成基于BCG的
Step1 stdafx.h 加入如下内容.BCGCBProInc.h间接导入了lib. #include <BCGCBProInc.h> // BCGControlBar Pro#if ...
- 基于Dubbo协议的接口测试
一.Dubbo协议 Dubbo架构的接口一般有四大模块: provider:服务提供方,给注册中心和监控方提供服务 registry:注册中心 zookeeper,接收消费方和服务提供方提供的服务 C ...
- discuz的ajax,discuz分页函数改成基于jqueryd的ajax分页函数
/** *AJAX分页 *$num 为总共的条数 比如说这个分类下共有15篇文章 *$perpage为每页要显示的条数 *$curpage为当前的页数 *$url为请求路径, *$obj为html ...
- 改来改去把微服务改成了分布式单体
昨晚睡前,撸了几个群聊的聊天记录.发现一个很有意思的名词"分布式单体",顺藤摸瓜翻了一下聊天记录,大致内容就是某公司在做微服务改造,但改成了四不像,形式上像微服务,本质上依然是单体 ...
- Android之基于XMPP协议即时通讯软件(一)
为什么80%的码农都做不了架构师?>>> 文章开头,先打一下广告咯,今年误打误撞,侥幸进入2013CSDN博客之星候选,目前排名已经有点不堪入目,所以,谨希望广大基友们动动手指 ...
- dubbo调用超时回滚_微服务痛点基于Dubbo + Seata的分布式事务(AT模式)
前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...
- postman如何改成中文版_在 Windows 上如何用 Postman 重现 Dubbo 反序列化漏洞
Dubbo 2.7.5 以下的版本暴出了一个反序列化漏洞,那么如何在 windows 上重现这个漏洞呢? 1. 下载官方 demo 代码(暴出的漏洞是 http 协议的,故使用 http 的 demo ...
最新文章
- [Enterprise Library]Configuration类设计分析
- 信号与线性系统分析_什么是线性系统?如何辨别控制系统?控制系统基本要求是什么?...
- 数据结构(一)---顺序表的实现---java版
- 指针常量与常量指针精解【一次掌握】
- 小学计算机制作表格教案,小学信息技术《表格的制作》教案
- Python变量、脚本名称、函数命名规范
- Spring :事务使用的注意事项
- Redis配置优化和使用
- java中的银行界面开发_ATM机银行项目java图形界面
- python写连点脚本_python鼠标连点器-测试版
- 【解决】简单有效的使用lodop打印小票功能
- 腾讯云支付系统架构介绍
- Win32API编程_切换窗口
- 多渔:赚钱,就是专注和刻意练习!
- 以太镇火了,快卖掉手中的猫买楼吧
- 用递归+缓存求阶乘和排列组合数
- 手把手教你实现热力图!
- 2012年9月9日参加中国软件开发者大会学习笔记
- 入坑codewars
- 互联网寒冬——“大裁员”