feign客户端设置超时时间操作

网友投稿 383 2022-11-19


feign客户端设置超时时间操作

我就废话不多说了,大家还是直接看代码吧~

/**

* feign调用客户端

*/

@FeignClient(name = "user", url = "${user.url}", configuration = MyFeignDecoder.class)

public interface UserClient {

@GetMapping("/rest/user/get/detail/{loginName}")

jsONObject getUserInfoByLoginName(@PathVariable(value = "loginName") String loginName);

}

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.context.annotation.Scope;

import com.iflytek.icourt.exception.UnloginErrorException;

import com.iflytek.icourt.secretary.constant.Constant;

import com.netflix.hystrix.exception.HystrixBadRequestException;

import feign.Request;

import feign.Response;

import feign.codec.Encoder;

import feign.jackson.JacksonEncoder;

/**

* feign配置类

*/

@Configuration

public class MyFhttp://eignDecoder implements feign.codec.ErrorDecoder{

public static Logger logger = LoggerFactory

.getLogger(MyFeignDecoder.class);

@Override

public Exception decode(String methodKey, Response response) {

logger.info("status:-------" + response.status());

return feign.FeignException.errorStatus(methodKey, response);

}

@Bean

@Primary

@Scope("prototype")

public Encoder jacksonEncoder () {

return new JacksonEncoder();

}

@Bean

Request.Options feignOptions() {

return new Request.Options(2 * 1000, 120 * 1000);

}

}

补充知识:feign调用问题\超时

1、项目结构 每个微服务是provider情况下有一个client模块(里面含有定义好的feignclient 接口) 专门打包出去给其他微服务消费

这样的话 其他需要调用的微服务只要把这个client jar包引入即可,

2、在其他微服务中 引入clientXX.jar 这时候有一个坑, 就是 @EnableFeignClients这个注解默认是只扫描项目启动application下的包 如果不同项目可能包路径不一致, 所以@EnableFeignClients得指定你的client.jar里面的路径 或者两个项目中 共同的顶级路径 例如com.XX.cloud 同一个公司内部 顶层包结构应该是一致的

3、feign调用超时 默认feign调用超时是1000毫秒的 有断点就肯定超时

需要加上以下配置

feign.hystrix.enabled=true

#feign调用默认是1000毫秒=1秒 应该设置成更长时间1000 * 60 * 5 = 5分钟 add by six-vision

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=300000

hystrix.command.default.chttp://ircuitBreaker.sleepWindowInMilliseconds=300000

hystrix.command.default.circuitBreaker.forceClosed=true

#hystrix.command.default.execution.timeout.enabled=false

#请求处理的超时时间 add by six-vision

ribbon.ReadTimeout=300000

ribbon.SocketTimeout=300000

#请求连接的超时时间 add by six-vision

ribbon.ConnectTimeout: 30000


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

上一篇:Spring Boot 通过注解实现数据校验的方法
下一篇:Java CountDownLatch应用场景代码实例
相关文章

 发表评论

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