使用FeignClient進(jìn)行微服務(wù)交互方式(微服務(wù)接口互相調(diào)用)
使用FeignClient進(jìn)行微服務(wù)交互
先寫一個(gè)公共方法
? public String getSettingValue(String name) { ? ? ? ?Map<String, Object> map = (Map) settingClient.getByName(name).getData(); ? ? ? ?return (String) map.get("value"); ? }
然后寫一個(gè)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注解用于指定從哪個(gè)服務(wù)中調(diào)用功能 ,注意 里面的名稱與被調(diào)用的服務(wù)
名保持一致,并且不能包含下劃線。
@RequestMapping注解用于對(duì)被調(diào)用的微服務(wù)進(jìn)行地址映射。注意 @PathVariable注
解一定要指定參數(shù)名稱,否則出錯(cuò)。
@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ù)注意事項(xiàng)
在初次使用springcloud,調(diào)用微服務(wù)的時(shí)候,常常會(huì)踩坑,這里總結(jié)一下,在調(diào)用微服務(wù)的時(shí)候,常犯的幾點(diǎn)錯(cuò)誤及注意點(diǎn):
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}") 。因?yàn)镚etMapper是一個(gè)組合注解。
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)造
如果想要請(qǐng)求target-servername 服務(wù),并且參數(shù)有多個(gè)例如:http://target-servername/query-by?id=1&username=張三 要怎么辦呢? 不能構(gòu)造一個(gè)復(fù)雜的對(duì)象去接收,必須一個(gè)一個(gè)接收參數(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); }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)組集合的深度復(fù)制代碼實(shí)例
這篇文章主要介紹了Java數(shù)組集合的深度復(fù)制代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java的wait(), notify()和notifyAll()使用心得
本篇文章是對(duì)java的 wait(),notify(),notifyAll()進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-08-08Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解
這篇文章主要介紹了Spring Cloud @EnableFeignClients注解的屬性字段basePacka詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java源碼深度分析String與StringBuffer及StringBuilder詳解
當(dāng)對(duì)字符串進(jìn)行修改的時(shí)候,需要使用?StringBuffer?和?StringBuilder類,和String類不同的是,StringBuffer和?StringBuilder類的對(duì)象能夠被多次的修改,并且不產(chǎn)生新的未使用對(duì)象,本篇我們來(lái)分析分析它們的源碼2022-05-05SpringBoot中的@RestControllerAdvice注解詳解
這篇文章主要介紹了SpringBoot中的@RestControllerAdvice注解詳解,RestControllerAdvice注解用于創(chuàng)建全局異常處理類,用于捕獲和處理整個(gè)應(yīng)用程序中的異常,需要的朋友可以參考下2024-01-01SpringCloud實(shí)戰(zhàn)小貼士之Zuul的路徑匹配
這篇文章主要介紹了SpringCloud實(shí)戰(zhàn)小貼士之Zuul的路徑匹配,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10