5

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

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

我是否可以在我的池中预先建立一个通道作为每个连接一个通道,或者始终可以在发送消息之前创建一个通道?我担心在频道上创建频道可能会消耗资源。我可以让通道与包含连接和通道的类共存,因此它总是在使用需要之前预先创建。如果通道创建没有资源消耗或泄漏影响,那么我可以继续我目前的方法。

4

1 回答 1

14

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

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

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

于 2013-03-29T12:15:38.440 回答