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