在同一频道上使用和发布消息

时间:2015-10-28 11:35:16

标签: java multithreading rabbitmq message-queue mq

我正在使用Java在RabbitMQ中实现请求/回复模式。我知道通道不是线程安全的,因此每个消费者/线程使用1个通道。

我想知道当单个频道用于消费和发布消息,或接收请求并在我的情况下返回响应时,如下面的代码,来自{{3},是否存在任何问题或效率低下}:

channel.basicConsume(RPC_QUEUE_NAME, false, consumer);
channel.basicPublish("", props.getReplyTo(), replyProps, response.getBytes());

我应该使用两种不同的渠道来消费和发布消息吗?

2 个答案:

答案 0 :(得分:0)

根据Rabbitmq Java API指南-https://www.rabbitmq.com/api-guide.html

在共享通道中使用一个线程并在另一个线程中发布是安全的。

在“通道和并发注意事项(线程安全)”部分中提到。

答案 1 :(得分:-1)

您应该使用不同的连接进行发布和使用,因为RabbitMQ可以限制发布连接。如果您的消费者处于相同的连接中,他们也可能会被阻止。

https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/