使用FeignClient進行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用)
使用FeignClient進行微服務(wù)交互
先寫一個公共方法
? public String getSettingValue(String name) {
? ? ? ?Map<String, Object> map = (Map) settingClient.getByName(name).getData();
? ? ? ?return (String) map.get("value");
? }然后寫一個Feign調(diào)用
@FeignClient(value="qiang-admin")
public interface SettingClient {
?? ?@RequestMapping(value="/setting/getSetting/{name}",method = RequestMethod.GET)
?? ?public ReturnMsg getByName(@PathVariable("name") String name);
}@FeignClient注解用于指定從哪個服務(wù)中調(diào)用功能 ,注意 里面的名稱與被調(diào)用的服務(wù)
名保持一致,并且不能包含下劃線。
@RequestMapping注解用于對被調(diào)用的微服務(wù)進行地址映射。注意 @PathVariable注
解一定要指定參數(shù)名稱,否則出錯。
@PathVariable:接口參數(shù)
被Feign調(diào)用的方法如下
?? ?@RequestMapping(value="/getSetting/{name}",method = RequestMethod.GET)
?? ?public ReturnMsg getByName(@PathVariable String name){
?? ??? ?Setting condition = new Setting();
?? ??? ?condition.setName(name);
?? ??? ?ReturnMsg returnMsg = new ReturnMsg<>();
?? ??? ?Setting setting = settingService.findByCondition(condition);
?? ??? ?returnMsg.setCode(ReturnIntCode.SUCCESSS_CODE);
?? ??? ?returnMsg.setData(setting);
?? ??? ?return returnMsg;
?? ?}@FeignClient調(diào)用微服務(wù)注意事項
在初次使用springcloud,調(diào)用微服務(wù)的時候,常常會踩坑,這里總結(jié)一下,在調(diào)用微服務(wù)的時候,常犯的幾點錯誤及注意點:
FeignClient接口不能使用@GettingMapping之類的組合注解
@FeignClient("target-servername")
? public interface FeignClient {
? ? ? ?@RequestMapping(value = "/simple/{id}", method =RequestMethod.GET)
?public Object findById(@PathVariable("id") Long id);
?...
}這邊的@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) 不能寫成@GetMapping("/simple/{id}") 。因為GetMapper是一個組合注解。
FeignClient接口中如果使用到@PathVariable
必須指定其value
@FeignClient("target-servername")
public interface FeignClient {
?@RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
?public Object findById(@PathVariable("id") Long id);
?...
}這邊的@PathVariable("id") 中的”id”,不能省略,必須指定。
FeignClient多參數(shù)的構(gòu)造
如果想要請求target-servername 服務(wù),并且參數(shù)有多個例如:http://target-servername/query-by?id=1&username=張三 要怎么辦呢? 不能構(gòu)造一個復(fù)雜的對象去接收,必須一個一個接收參數(shù)
@FeignClient("target-servername")
public interface UserFeignClient {
?@RequestMapping(value = "/query-by", method = RequestMethod.GET)
?public Object queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解析Spring RestTemplate必須搭配MultiValueMap的理由
本文給大家介紹Spring RestTemplate必須搭配MultiValueMap的理由,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,需要的朋友參考下吧2021-11-11
Mybatis-plus查詢語句加括號(.or(),.and())問題
這篇文章主要介紹了Mybatis-plus查詢語句加括號(.or(),.and())問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
深入分析Spring BeanDefinition的構(gòu)造元信息
Bean Definition是一個包含Bean元數(shù)據(jù)的對象,它描述了如何創(chuàng)建Bean實例、Bean屬性的值以及Bean之間的依賴關(guān)系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下2024-01-01

