netty中Fegin调用 InheritableThreadLocal丢失缓存
时间: 2023-12-06 12:32:52 浏览: 84
netty 通过端口调用关闭
在Netty中使用Feign调用时,可能会遇到InheritableThreadLocal丢失缓存的问题。这是因为Netty使用了线程池来处理请求,而线程池会重用线程。InheritableThreadLocal是线程继承的一种机制,可以在子线程中访问父线程中设置的值,但是在线程池中,父线程的值并不会自动传递给子线程。
为了解决这个问题,可以在调用Feign之前,手动将InheritableThreadLocal的值设置到子线程中。可以使用Runnable或者Callable的方式,在提交任务到线程池之前,将InheritableThreadLocal的值传递给子线程。例如:
```java
Runnable task = () -> {
InheritableThreadLocalValue value = InheritableThreadLocal.get();
// 在子线程中使用value进行操作
};
// 将InheritableThreadLocal的值传递给子线程
InheritableThreadLocalValue parentValue = InheritableThreadLocal.get();
executorService.submit(() -> {
InheritableThreadLocal.set(parentValue);
task.run();
});
```
这样就能确保子线程中能够访问到正确的InheritableThreadLocal的值。
阅读全文