<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
远程调用丢失请求头
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Configuration
public class FeignConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor () {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes ();
HttpServletRequest request = requestAttributes.getRequest ();
String cookie = request.getHeader ("Cookie");
requestTemplate.header ("Cookie", cookie);
}
};
}
}
异步调用丢失上下文
private static final ThreadPoolExecutor THREADPOOLEXECUTOR =
new ThreadPoolExecutor (
100,
100,
100,
TimeUnit.SECONDS,
new ArrayBlockingQueue<> (1000));
public static void main(String[] args) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes ();
CompletableFuture<Void> task1 = CompletableFuture.runAsync (() -> {
RequestContextHolder.setRequestAttributes (requestAttributes);
}, THREADPOOLEXECUTOR);
CompletableFuture<Void> task2 = CompletableFuture.runAsync (() -> {
RequestContextHolder.setRequestAttributes (requestAttributes);
}, THREADPOOLEXECUTOR);
try {
CompletableFuture.allOf (task1, task2).get ();
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException (e);
}
}
支持Multipart格式传参
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.8.0</version>
</dependency>