记录在SpringCloud项目中使用Feign远程调用其他模块接口

假定提供接口的模块为模块A,需要远程调用的模块为模块B,模块A内部有一个接收用户信息的Controller类为UserController,其中含有一个queryUserById(Long id)方法

  • 1.先在模块A中创建一个api的目录,将需要被调用的方法按照类似Controller的格式转换为接口文件的格式保存在该目录下,则接口文件格式参考如下:
    [若返回值为ResponseEntity的可以将ResponseEntity去除,只取其内部的内容]
@RequestMapping("user")
public interface UserApi {

    @GetMapping("{id}")
    User queryUserById(@PathVariable("id") Long id);
}
  • 2.接着在模块B中添加Feign的依赖和模块A的依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>1.4.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>cn.demo</groupId>
    <artifactId>module-a</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
  • 3.在模块B的启动类上添加Feign开启的注解@EnableFeignClients,同时创建一个client目录,在其内部添加一个名为UserClient的接口类
@FeignClient(value = "模块A的服务名称")
public interface UserClient extends UserApi {
}
  • 4.此时就可以在模块B中需要使用模块A方法的地方注入UserClient对象,再调用其内部的方法即可
@Autowired
private UserClient userClient;

// 调用其内部方法
User user = this.userClient.queryUserById(id);

对于涉及到不同IP的两个模块之间的调用,可以简化掉Api类的环节,包括对另一个模块的依赖也可以去除,直接将方法相关信息写入Client类中,演示如下:

@FeignClient(value = "模块A的服务名称")
public interface UserClient {

    @GetMapping("{id}")
    User queryUserById(@PathVariable("id") Long id);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,136评论 1 32
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,808评论 0 10
  •  通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌...
    Chandler_珏瑜阅读 213,733评论 15 140
  • 所有流水都会朝北 淌进梦里一次回归 捏碎所有心痛的时光 回忆火车途径的村庄 耳边的音乐闻到一丝甜 桌上的思念汇成一...
    南城北语阅读 258评论 0 0
  • 二十出头的年纪,足不出户就能看到别人尬车炫富,游山玩水,配文诗和远方。低头看自己一无所有的就尬得厉害。独处得久了人...
    草木将军阅读 386评论 0 1