在多线程环境中,我应该将线程相关数据存储在接收 rabbitListener 组件中的什么位置?

Where should i store thread dependent data within a receiving rabbitListener component in a multithreaded environment?

我在多线程环境中使用 spring amqp 的基于注解的方法(我有多个消费者 => 多个 rabbit 侦听器容器)。

@RabbitListener(queues = "tasks")
public void receiveMessage(@Payload Task task) {
     // usage of httpClient here with its own httpContext (would be fine)
     // this method gets called from different listenerContainers / threads
}

我的组件包含带注释的 receiveMessage() 方法,需要使用 apache http 客户端进行一些 http 调用。因为我同时与多个消费者一起工作,所以这个方法从不同的线程调用,apache http 客户端文档说我应该为每个线程创建一个 httpContext 以保证线程安全。由于所有线程都调用相同的组件方法,我无法将 httpContext 放入组件中。

每个侦听器容器是否有类似侦听器容器上下文的东西,我可以在其中放置 httpClientContext?或者有人知道如何轻松解决这个问题吗?我考虑过 ThreadLocal 或 httpContexts 的中央注册中心,但如果这更容易些就好了。

没有框架提供的东西;最简单的解决方案是将它们存储在 LinkedBlockingQueue 之类的东西中,然后检查一个,使用它,并在完成后将其放回队列中(如果队列为空,则根据需要创建一个)。

ThreadLocal 也可以,但我更喜欢使用池。