Java 正在返回池的工作线程的AsyncHttpClient和Netty-hook?

Java 正在返回池的工作线程的AsyncHttpClient和Netty-hook?,java,netty,asynchttpclient,Java,Netty,Asynchttpclient,我使用AsyncHttpClient和Netty在微服务之间执行非阻塞REST调用。我试图弄清楚,一旦Netty worker线程返回到池中,如何清除threadLocal值 在AsyncCompletionHandler onCompleted()和onThrowable()方法中(即当返回HTTP响应时),我添加了一些threadLocal数据。具体地说,我存储了一个与请求链关联的ID,以帮助在服务之间关联日志消息。一旦工作线程完成执行并返回到线程池,我需要清除这个threadLocal数据

我使用AsyncHttpClient和Netty在微服务之间执行非阻塞REST调用。我试图弄清楚,一旦Netty worker线程返回到池中,如何清除threadLocal值

在AsyncCompletionHandler onCompleted()和onThrowable()方法中(即当返回HTTP响应时),我添加了一些threadLocal数据。具体地说,我存储了一个与请求链关联的ID,以帮助在服务之间关联日志消息。一旦工作线程完成执行并返回到线程池,我需要清除这个threadLocal数据。但是,我找不到任何用于此的挂钩

我认为创建覆盖afterExecute的自己的ExecutorService(Runnable r,Throwable t)并通过AsyncHttpClientConfig.Builder进行设置是可行的,但我认为我误解了AsyncHttpClient如何使用ExecutorService。只有在首次创建ExecutorService时,在发送/接收HTTP请求/响应的过程中才调用beforeExecute()、execute()或afterExecute()

那么,有没有办法让我知道工作线程何时完成执行并返回到线程池

为了记录在案,以下是我正在使用的库:

<dependency>
    <groupId>com.ning</groupId>
    <artifactId>async-http-client</artifactId>
    <version>1.9.31</version>
</dependency>
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.0.32.Final</version>
</dependency>

康宁
异步http客户端
1.9.31
伊奥·内蒂
讨厌的
4.0.32.1最终版本

首先,您的AHC和Netty版本不一致。AHC1的目标是Netty 3,而AHC2的目标是Netty 4

那么,不要试图这样做。线程不会返回到池中


线程同时与多个套接字关联,响应可以跨越多个TCP帧。

感谢提供有关AHC和Netty版本的信息。对穿线行为不满;一旦收到异步http响应,使用threadlocal数据听起来是个坏主意。一般来说,使用ThreadLocals存储长寿命数据,这样就不必将其作为方法参数传递,这是一个坏主意。只有当您有一个连续的单线程路径时,它才起作用。非阻塞API为您提供了用于存储此类数据的回调,请参阅AHC的AsyncHandler和ListenableFuture;我一直在努力使我们现有的框架能够使用异步调用。但了解这种方法的局限性肯定会有所帮助。