AsyncHttpClient 和 Netty - 工作线程返回池的挂钩?

AsyncHttpClient and Netty - hook for worker thread being returned to pool?

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

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

我认为创建我自己的 ExecutorService 来覆盖 afterExecute(Runnable r, Throwable t) 并通过我的 AsyncHttpClientConfig.Builder 设置它会起作用,但我认为我误解了 AsyncHttpClient 如何使用 ExecutorService。 sending/receiving HTTP requests/responses 过程中根本没有调用beforeExecute()、execute() 或afterExecute(),仅在首次创建ExecutorService 时调用。

那么,有什么方法可以让我知道工作线程何时执行完毕并返回到线程池?

郑重声明,以下是我正在使用的库:

<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>

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

那么,请不要尝试这样做。线程未返回池

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