使用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);
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解析Spring RestTemplate必须搭配MultiValueMap的理由
本文给大家介绍Spring RestTemplate必须搭配MultiValueMap的理由,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友参考下吧2021-11-11
Mybatis-plus查询语句加括号(.or(),.and())问题
这篇文章主要介绍了Mybatis-plus查询语句加括号(.or(),.and())问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
深入分析Spring BeanDefinition的构造元信息
Bean Definition是一个包含Bean元数据的对象,它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系,本文将带大家深入分析Spring BeanDefinition的构造元信息,需要的朋友可以参考下2024-01-01


最新评论