我是Message Queues世界的新手,我目前正在评估RabbitMQ,ActiveMQ和Kafka。我看到在RabbitMQ中,Producer将创建一个到RabbitMQ服务器的连接,持有Connection的线程将保持活动状态,直到连接关闭。这让我相信必须是一个单独的线程,它将信息传递给RMQ Producer线程,它只是将消息发布到队列并保持循环,直到连接到RMQ Server关闭为止?这个假设是否正确?任何想法/意见将不胜感激。
谢谢!
P.S:这不是Kafka的行为。 [Apache Kafka: Java Producer reusability]
答案 0 :(得分:2)
通常,每个应用程序实例应该有一个RMQ连接。一旦应用程序启动,就可以打开该连接。
但是,有了连接,你还无法发布或使用消息。要做到这一点,你需要创建一个频道。
一般最佳实践是应用程序中每个线程一个通道。需要从这个线程发布消息?为线程创建一个通道。完成发布它,而不是在这个频道上做任何其他RMQ工作?关闭频道。
与连接不同,渠道便宜且易于创建。它们在现有的RMQ连接上工作,并且它们只需要很少的资源来创建。
您可以在一个连接中创建数千个频道(但出于性能原因,您可能希望限制该数量)