如何从Java servlet Web容器中正确实现RabbitMQ RPC?

时间:2013-08-24 08:23:53

标签: java multithreading servlets rabbitmq thread-local

我希望传入的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客户端创建的线程。

0 个答案:

没有答案