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

Sample

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

Steps

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

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

在 dto 包,

java 复制代码
@Data
@ApiModel(value = "Market RPC数据的传输对象")
public class MarketDto {
	// ......(一些属性)
}

在 feign 包,

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

在 mappers 包,

java 复制代码
// 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,
java 复制代码
@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 并调用方法,

java 复制代码
@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);
        // ......
    }
相关推荐
2501_912784086 分钟前
告别“汗水出海”:基于微服务架构的跨境电商系统设计与实现——以Taocarts为例
微服务·云原生·架构·taocarts
WL_Aurora8 分钟前
Java基础知识超详细总结(从入门到精通)
java
咖啡八杯11 分钟前
GoF设计模式——抽象工厂模式
java·后端·spring·设计模式·抽象工厂模式
Thanks_ks14 分钟前
分布式锁:Redis 与 Redisson 的工程实践与避坑指南
java·redis·分布式锁·redisson·微服务架构·并发编程·高可用
掉鱼的猫20 分钟前
agentscope-harness vs solon-ai-harness:Java 智能体「马具引擎」的双雄对决
java·openai
RainCity26 分钟前
Java Swing 自定义组件库分享(四)
java·笔记·后端
狼与自由29 分钟前
微服务的演化过程
微服务·云原生·架构
带刺的坐椅39 分钟前
agentscope-harness vs solon-ai-harness:Java 智能体「马具引擎」的双雄对决
java·ai·llm·solon·agentscope·harness
Seven9741 分钟前
Paxos算法:如何解决分布式系统中的共识问题?
java
铁皮哥1 小时前
【力扣题解】LeetCode 25. K 个一组翻转链表
java·数据结构·windows·python·算法·leetcode·链表