【发布时间】:2014-12-08 08:48:33
【问题描述】:
我想快速确认一下我怀疑 RabbitMQ 文档的这一部分所说的内容:
对消费者的回调在与连接管理的线程不同的线程上分派。这意味着消费者可以安全地调用 Connection 或 Channel 上的阻塞方法,例如 queueDeclare、txCommit、basicCancel 或 basicPublish。
每个 Channel 都有自己的调度线程。对于每个通道一个消费者的最常见用例,这意味着消费者不会阻碍其他消费者。如果每个 Channel 有多个 Consumer,请注意长时间运行的 Consumer 可能会阻止向该 Channel 上的其他 Consumer 发送回调。
我有各种命令(消息)通过一个附加了 DefaultConsumer 的单个入站队列和通道进入。假设 DefaultConsumer 中有一个线程池可以让我直接从消费者回调方法运行应用程序逻辑,并且我不会阻止后续命令的处理是否正确?如果看起来有瓶颈,我可以给 RMQ 一个更大的线程池吗?
此外,偶尔会有一个basicPublish从其他线程到同一频道。我认为这确实阻碍了消费者?我想我应该在这样做时使用一个新频道?
【问题讨论】:
标签: java multithreading rabbitmq