我希望传入的Java servlet Web请求使用所谓的here所述的RPC方法来调用RabbitMQ。
但是,我不确定如何在请求之间正确地重用回调队列,因为根据上面链接的RabbitMQ教程为每个请求创建一个新的回调队列是低效的(即使使用Queue TTL feature,RabbitMQ也可能无法应对)。
每个servlet请求通常只有1-2个RPC调用,但显然每秒有很多servlet请求。
我认为我不能在线程之间共享回调队列,因此我希望每个Web工作线程至少有一个。
我的第一个想法是将回调队列存储在ThreadLocal中,但这可能导致内存泄漏。
我的第二个想法是将它们存储在一个会话中,但我不确定它们是否会正确序列化,而且我的会话当前没有在Web服务器之间复制/共享,所以恕我直言不是一个好的解决方案。
我的基础架构是Tomcat / Guice / Stripes Framework。
任何想法最强大/最简单的解决方案是什么?
我是否在这整个方法中遗漏了什么,从而使事情过于复杂?
注意1-此问题与所描述的整体业务案例here有关 - 请参阅选项1。
注2 - 有一个看似相关的问题How to setup RabbitMQ RPC in a web context,但它主要关注正确关闭RabbitMQ客户端创建的线程。