问题描述
FeignClient 中声明了这么一个方法
@RequestMapping(method = RequestMethod.PATCH, value = "/agents/{id}", consumes = "application/json") void update(@PathVariable("id")String id, @RequestBody Mapinfo);
其它得方法调用都能成功,就是这个方法调用得时候报异常:
com.netflix.hystrix.exception.HystrixRuntimeException: update timed-out and no fallback available....
解决过程
这个异常是 hystrix(断路器)抛出的,只能看出来调用超时。为了排除干扰,我先暂时禁用Feign的断路器:在配置文件加feign.hystrix.enabled: false
,然后再次调用试试:
feign.RetryableException: Invalid HTTP method: PATCH executing PATCH http://agent-info/agents/0123456748...Caused by: java.net.ProtocolException: Invalid HTTP method: PATCH at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:440)...
看来这个问题是因为java.net.HttpURLConnection.setRequestMethod 不支持PATCH方法,无法将请求发送出去。
HttpClient 应该支持PATCH方法。 谷歌一下关键词spring feign httpclient patch
找到 解决方式
netflix 有feign的httpclient支持。maven加入下面的依赖就搞定了。
io.github.openfeign feign-httpclient 9.5.0