Feign调用时,不同模块之间调用需要传递请求头,如a模块传递到b模块,可以在a模块采用以下方式。
增加feign配置
@Slf4j
@Configuration
public class FeignConfiguration implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
Map<String,String> headers = getHeaders(getHttpServletRequest());
for(String headerName : headers.keySet()){
requestTemplate.header(headerName, getHeaders(getHttpServletRequest()).get(headerName));
}
}
private HttpServletRequest getHttpServletRequest() {
try {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private Map<String, String> getHeaders(HttpServletRequest request) {
Map<String, String> map = new LinkedHashMap<>();
Enumeration<String> enumeration = request.getHeaderNames();
while (enumeration.hasMoreElements()) {
String key = enumeration.nextElement();
String value = request.getHeader(key);
map.put(key, value);
}
return map;
}
}
yml配置
feign:
hystrix:
enabled: true
client:
config:
default:
connectTimeout: 60000
readTimeout: 60000
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
strategy: SEMAPHORE
thread:
timeoutInMilliseconds: 60000
Feignclient调用的时候指定configuration
package com.xxx.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.util.Map;
@FeignClient(name = "credit", url="${credit-system.credit}", configuration = FeignConfiguration.class)
public interface MerchantApiService {
@PostMapping("/merchant/login")
Result login(@RequestBody MerchantAdminVO merchantAdmin);
}
参考:https://blog.csdn.net/Mu_Xue_Chen/article/details/98946207