2013-03-28 117 views
2

对于RabbitMQ使用java客户端,我创建了一个连接池机制,它具有一组已建立并可用的rabbitmq连接。客户端租用连接后,客户端将创建一个通道。如果非要送执行任务和发送100条短信,为每个邮件的客户端将租赁的连接,并创建一个API,如通道:在RabbitMQ中,我应该在Connections,Channels还是两者上创建连接池?

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

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

+1

查看此[问题](http://stackoverflow.com/questions/10365867/how-can-i-pool-channels-in-rabbitmq)在我看来,我上面的问题更有效。在频道上汇聚似乎是有效的。什么是未记录的或未完全理解的是如何创建连接和通道的适当比率(每个连接有多少个通道)以及如何根据该通道来声明容量。在单个连接和多个通道上汇集可能是错误的,所以我的问题是如何定义该比率。 – gextra 2013-03-28 20:59:09

回答

8

基于更多的研究和其他组的观察,这里有关于渠道的一些事实:

    它似乎有没有文件规定如何计算每个连接通道数的比值,既不是为了
  • 每个连接运行多个连接vs多个通道的好处
  • 运行大量连接似乎比运行大量通道更耗费资源。另外,连接仅限于一定数量的文件描述符,而通道则不是。
  • 一些个别的测试显示池连接的性能基准与汇集通道是相似

因此,最好的办法看来是有利于具有多个信道,其中每个信道将被设置一个连接和池的一个不同的线程(以防止并发问题)。

+1

我认为,如果您看到一个连接无法处理从服务器接收的数据,那么建立更多连接才有意义。否则,在大多数情况下,将所有通道复用到同一个连接上都可以工作。尽管这取决于交通模式。 – Buchi 2013-09-08 05:47:35

+0

那么,在java中有静态连接是否安全? – 2014-10-20 12:53:49

相关问题