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

【教程】微服务使用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)

    @Override
    public 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{
	@Autowired
    private MarketServiceFeign marketServiceFeign;
    
    @Override
    public UserTotalAccountVo getUserTotalAccount(Long userId) {
    	// ……(业务逻辑)
    	// 调用 Feign 远程接口
        MarketDto marketDto = marketServiceFeign.findByCoinId(basicCoinId, coinId);
        // ……
    }

http://www.kler.cn/a/228294.html

相关文章:

  • 从新手到高手的蜕变:MySQL 视图进阶全攻略
  • 什么是稀疏 MoE?Doubao-1.5-pro 如何以少胜多?
  • 使用 Python 获取 1688 商品快递费用 API 接口的示例代码解析
  • FFmpeg常用命令
  • SQL-leetcode—1141. 查询近30天活跃用户数
  • 重生之我在异世界学编程之C语言:深入指针篇(上)
  • 【分布式】雪花算法学习笔记
  • 从零开始 TensorRT(4)命令行工具篇:trtexec 基本功能
  • react和antd学习笔记
  • STM32--揭秘中断(简易土货版)
  • Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)
  • k8s学习-数据管理
  • Jmeter 01 -概述线程组
  • windows下docker的使用
  • STM32—系统定时器
  • 炸裂!可视化大模型内部架构的实用工具!
  • C#,雅各布斯塔尔—卢卡斯(Jacobsthal Lucas Number)的算法与源代码
  • Pytest 与allure测试报告集成
  • leetcode 3.无重复字符的最长字串(滑动窗口) (C++)DAY2
  • 目标检测及相关算法介绍
  • 逆向基础-破解密码
  • spring boot打完jar包后使用命令行启动,提示xxx.jar 中没有主清单属性
  • Unity3D实现坦克大战
  • vue基本语法总结大全
  • 【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离
  • 【图论】基环树