当前位置: 首页 > news >正文

【教程】微服务使用Feign接口进行远程调用的步骤

Sample

以 finance 模块 调用 exchange 模块 的 MarketService 为例。

Steps

服务提供者(exchange):搭建接口

  1. 在 exchange-api 下,新建 MarketDto 和 MarketServiceFeign。并在 exchange-service 下使用 MapStruct 进行映射。

在 dto 包,

@Data
@ApiModel(value = "Market RPC数据的传输对象")
public class MarketDto {// ……(一些属性)
}

在 feign 包,

@FeignClient(name = "exchange-service", configuration = OAuth2FeignConfig.class, path = "/markets")
public interface MarketServiceFeign {@GetMapping("/getMarket")MarketDto findByCoinId(Long sellCoinId, Long buyCoinId);
}

在 mappers 包,

// MapStruct 会自动生成实现类
@Mapper(componentModel = "spring")
public interface MarketDtoMappers {MarketDtoMappers INSTANCE = Mappers.getMapper(MarketDtoMappers.class);MarketDto entity2Dto(Market market);Market dto2Entity(MarketDto marketDto);List<MarketDto> entity2Dto(List<Market> market);List<Market> dto2Entity(List<MarketDto> marketDto);
}
  1. 在 exchange-service 的 MarketController 下实现 MarketServiceFeign,
@RestController
@RequestMapping("/markets")
@Api(tags = "交易市场的控制器")
public class MarketController implements MarketServiceFeign {// ……(其他controller)@Overridepublic MarketDto findByCoinId(Long sellCoinId, Long buyCoinId) {MarketDto marketDto = marketService.findByCoinId(buyCoinId, sellCoinId);return marketDto;}

服务消费者(finance):调用接口

在 finance-service 的对应实现类注入 MarketServiceFeign 并调用方法,

@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService{@Autowiredprivate MarketServiceFeign marketServiceFeign;@Overridepublic UserTotalAccountVo getUserTotalAccount(Long userId) {// ……(业务逻辑)// 调用 Feign 远程接口MarketDto marketDto = marketServiceFeign.findByCoinId(basicCoinId, coinId);// ……}

相关文章:

  • latex algorithm algorithmic Undefined control sequence
  • 【原创 附源码】Flutter海外登录--Google登录最详细流程
  • 16:定时器和计数器
  • 编曲学习:旋律创作基础概念 和弦进行作曲 和弦外音使用 作曲技巧
  • 文件上传-Webshell
  • PHP框架详解 - symfony框架
  • 解释Java中的事务管理,以及事务的隔离级别是什么?
  • MySQL温故篇(一)SQL语句基础
  • Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目
  • R语言阈值效应函数cut.tab2.0版发布(支持线性回归、逻辑回归、cox回归,自定义拐点)
  • uTools工具使用
  • Redis-缓存问题及解决方案
  • Kafka系列之:Kafka集群同时设置基于时间和日志大小两种方式保存Topic的数据
  • 学习好并用好大模型
  • 【Cocos入门】场景切换(loadScene、preloadScene)
  • Google 是如何开发 Web 框架的
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • ECMAScript6(0):ES6简明参考手册
  • React as a UI Runtime(五、列表)
  • Vim Clutch | 面向脚踏板编程……
  • Web Storage相关
  • 闭包--闭包之tab栏切换(四)
  • 多线程 start 和 run 方法到底有什么区别?
  • 前端设计模式
  • 人脸识别最新开发经验demo
  • 一些关于Rust在2019年的思考
  • 移动端 h5开发相关内容总结(三)
  • Prometheus VS InfluxDB
  • raise 与 raise ... from 的区别
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #每日一题合集#牛客JZ23-JZ33
  • (0)Nginx 功能特性
  • (第27天)Oracle 数据泵转换分区表
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (译) 函数式 JS #1:简介
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)winform之ListView
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET单元测试
  • .net访问oracle数据库性能问题
  • .net网站发布-允许更新此预编译站点
  • .php文件都打不开,打不开php文件怎么办
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [20160807][系统设计的三次迭代]
  • [④ADRV902x]: Digital Filter Configuration(发射端)