使用FeignClient进行微服务交互方式(微服务接口互相调用)

网友投稿 896 2022-10-24

使用FeignClient进行微服务交互方式(微服务接口互相调用)

使用FeignClient进行微服务交互方式(微服务接口互相调用)

目录使用FeignClient进行微服务交互先写一个公共方法然后写一个Feign调用被Feign调用的方法如下@FeignClient调用微服务注意事项FeignClient接口不能使用@GettingMapping之类的组合注解FeignClient接口中如果使用到@PathVariableFeignClient多参数的构造

使用FeignClient进行微服务交互

先写一个公共方法

public String getSettingValue(String name) {

Map 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);

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Activiti产生的背景和作用
下一篇:#yyds干货盘点# leetcode算法题:最长回文串
相关文章

 发表评论

暂时没有评论,来抢沙发吧~