假定提供接口的模塊為模塊A技掏,需要遠(yuǎn)程調(diào)用的模塊為模塊B,模塊A內(nèi)部有一個(gè)接收用戶信息的Controller類(lèi)為
UserController
扫责,其中含有一個(gè)queryUserById(Long id)
方法
- 1.先在模塊A中創(chuàng)建一個(gè)api的目錄,將需要被調(diào)用的方法按照類(lèi)似Controller的格式轉(zhuǎn)換為接口文件的格式保存在該目錄下,則接口文件格式參考如下:
[若返回值為ResponseEntity的可以將ResponseEntity去除萝喘,只取其內(nèi)部的內(nèi)容]
@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的啟動(dòng)類(lèi)上添加Feign開(kāi)啟的注解
@EnableFeignClients
,同時(shí)創(chuàng)建一個(gè)client目錄,在其內(nèi)部添加一個(gè)名為UserClient
的接口類(lèi)
@FeignClient(value = "模塊A的服務(wù)名稱")
public interface UserClient extends UserApi {
}
- 4.此時(shí)就可以在模塊B中需要使用模塊A方法的地方注入
UserClient
對(duì)象阁簸,再調(diào)用其內(nèi)部的方法即可
@Autowired
private UserClient userClient;
// 調(diào)用其內(nèi)部方法
User user = this.userClient.queryUserById(id);
對(duì)于涉及到不同IP的兩個(gè)模塊之間的調(diào)用爬早,可以簡(jiǎn)化掉Api類(lèi)的環(huán)節(jié),包括對(duì)另一個(gè)模塊的依賴也可以去除启妹,直接將方法相關(guān)信息寫(xiě)入Client類(lèi)中筛严,演示如下:
@FeignClient(value = "模塊A的服務(wù)名稱")
public interface UserClient {
@GetMapping("{id}")
User queryUserById(@PathVariable("id") Long id);
}