方法一:配置bootstrap.yml或application.yml
feign:
hystrix:
enabled: false
httpclient:
enabled: true
client:
config:
default:
connectTimeout: 5000
readTimeout: 6000
SysUserClient: #登录操作时长调整为10s,防止超时
readTimeout: 10000
SysUserClient.java
package com.test.client.ucenter;
import com.test.api.ucenter.SysUserApi;
import com.test.common.constant.ServiceConstants;
import com.test.config.FeignConfiguration;
import feign.Request;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
@FeignClient(value = ServiceConstants.Services.UCENTER, configuration = FeignConfiguration.class,contextId = "SysUserClient")
public interface SysUserClient extends SysUserApi {
}
FeignConfiguration.java
package com.test.config;
import com.test.common.interceptor.FeignClientInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 配置类
**/
@Configuration
public class FeignConfiguration {
@Bean
public FeignClientInterceptor getFeignClientInterceptor() {
return new FeignClientInterceptor();
}
}
FeignClientInterceptor.java
package com.test.common.interceptor;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
/**
* 拦截器
**/
public class FeignClientInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (requestAttributes != null) {
HttpServletRequest request = requestAttributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
// 跳过 content-length
if ("content-length".equals(headerName)){
continue;
}
String headerValue = request.getHeader(headerName);
requestTemplate.header(headerName, headerValue);
}
}
}
}
}
方法二:通过Request.Options重新设置超时时间
SysUserClient.java
package com.test.client.ucenter;
import com.test.api.ucenter.SysUserApi;
import com.test.common.constant.ServiceConstants;
import com.test.config.FeignConfiguration;
import feign.Request;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
/**
* <p>
* 用户信息管理 Feign
*/
@FeignClient(value = ServiceConstants.Services.UCENTER, configuration = {FeignConfiguration.class,SysUserClient.Timeout.class},contextId = "SysUserClient")
public interface SysUserClient extends SysUserApi {
class Timeout {
@Bean
private Request.Options options() {
return new Request.Options(30000, 30000);//可@Value配置
}
}
}