在RabbitMQ中,我应该在Connections,Channels或两者上创建连接池吗?

时间:2013-03-28 11:02:28

标签: rabbitmq

为RabbitMQ使用java客户端,我创建了一个连接池机制,该机制已建立并可用的一组rabbitmq连接。一旦客户端租用连接,客户端就会创建一个通道。如果我必须发送执行任务并发送100条消息,则对于每条消息,客户端将租用连接并使用API​​创建通道,例如:

rqConnection = MyPoolManager.leaseConnection();
rqChannel = rqConnection.createChannel();

我可以在我的池中预先建立一个通道作为每个连接一个通道,还是在发送消息之前始终可以创建一个通道? 我担心的是,通过渠道创建渠道可能会消耗资源。我可以让渠道与包含连接和渠道的类共存,因此在使用需求之前始终预先创建。如果信道创建不会造成资源消耗或泄漏影响,那么我可以继续我目前的方法。

1 个答案:

答案 0 :(得分:10)

根据其他群体的进一步研究和观察,以下是有关渠道的一些事实:

  • 似乎没有文件说明如何计算每个连接的通道数量的比例,既没有运行多个连接的好处,也没有每个连接多个通道的好处
  • 运行大量连接似乎比运行大量通道更耗费资源。此外,连接仅限于一定数量的文件描述符,而通道则不限。
  • 一些个别测试显示,池化连接与池化通道的性能基准测试相似

因此,最佳方法似乎是支持在多个通道上建立一个连接和池,其中每个通道将由不同的线程提供(以防止并发问题)。