使用FeignClient進行微服務交互方式(微服務接口互相調用)
使用FeignClient進行微服務交互
先寫一個公共方法
public String getSettingValue(String name) { Map<String, Object> map = (Map) settingClient.getByName(name).getData(); return (String) map.get("value"); }
然後寫一個Feign調用
@FeignClient(value="qiang-admin") public interface SettingClient { @RequestMapping(value="/setting/getSetting/{name}",method = RequestMethod.GET) public ReturnMsg getByName(@PathVariable("name") String name); }
@FeignClient註解用於指定從哪個服務中調用功能 ,註意 裡面的名稱與被調用的服務
名保持一致,並且不能包含下劃線。
@RequestMapping註解用於對被調用的微服務進行地址映射。註意 @PathVariable註
解一定要指定參數名稱,否則出錯。
@PathVariable:接口參數
被Feign調用的方法如下
@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調用微服務註意事項
在初次使用springcloud,調用微服務的時候,常常會踩坑,這裡總結一下,在調用微服務的時候,常犯的幾點錯誤及註意點:
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多參數的構造
如果想要請求target-servername 服務,並且參數有多個例如:http://target-servername/query-by?id=1&username=張三 要怎麼辦呢? 不能構造一個復雜的對象去接收,必須一個一個接收參數
@FeignClient("target-servername") public interface UserFeignClient { @RequestMapping(value = "/query-by", method = RequestMethod.GET) public Object queryBy(@RequestParam("id")Long id, @RequestParam("username")String username); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringCloud全面解析@FeignClient標識接口的過程
- 關於註解FeignClient的使用規范
- SpringCloud 如何使用feign時的復雜參數傳遞
- feign實現傳遞參數的三種方式小結
- SpringCloud @FeignClient參數的用法解析