在RabbitMQ中,我们是否需要在单独的线程中管理Connections和Channels?

时间:2016-07-20 08:31:04

标签: rabbitmq apache-kafka

我是Message Queues世界的新手,我目前正在评估RabbitMQ,ActiveMQ和Kafka。我看到在RabbitMQ中,Producer将创建一个到RabbitMQ服务器的连接,持有Connection的线程将保持活动状态,直到连接关闭。这让我相信必须是一个单独的线程,它将信息传递给RMQ Producer线程,它只是将消息发布到队列并保持循环,直到连接到RMQ Server关闭为止?这个假设是否正确?任何想法/意见将不胜感激。

谢谢!

P.S:这不是Kafka的行为。 [Apache Kafka: Java Producer reusability]

1 个答案:

答案 0 :(得分:2)

通常,每个应用程序实例应该有一个RMQ连接。一旦应用程序启动,就可以打开该连接。

但是,有了连接,你还无法发布或使用消息。

要做到这一点,你需要创建一个频道。

一般最佳实践是应用程序中每个线程一个通道。需要从这个线程发布消息?为线程创建一个通道。完成发布它,而不是在这个频道上做任何其他RMQ工作?关闭频道。

与连接不同,渠道便宜且易于创建。它们在现有的RMQ连接上工作,并且它们只需要很少的资源来创建。

您可以在一个连接中创建数千个频道(但出于性能原因,您可能希望限制该数量)

相关问题