场景重现
我在demo项目中加入了zuul网关,写了俩服务,客户端向content服务发起get请求,经过zuul网关判断请求是否携带必要参数,然后再进入content服务,使用参数访问user服务。但是我写完这些之后,发现只要是请求就直接进到fallback方法里,提示远程方法超时,这就奇怪了,我远程服务好好的,都能请求的通的,那是什么原因呢。
跟踪Feign的执行接口Client.class的execute方法,发现我的url有俩问题
1.没有携带username参数
2.host不对,写的是服务名,也没有端口号
问题1:
请求只有url,没有参数,也就是说参数没有向下游传递。
解决方法:在content服务的接口方法的参数上添加@RequestParam注解,将请求参数与方法参数对应。同时保证远程调用接口的方法参数上也有该注解。
content接口
@RequestMapping("/listByUsername")
public String listByUsername(@RequestParam("name") String name){
List<Blog> list = myService.listMyBlogs(name);
return JSON.toJSONString(list);
}
UserRemote接口
@Service
@FeignClient(name = "user")
public interface UserRemote {
@RequestMapping("/findByUs