我正在使用Java在RabbitMQ中实现请求/回复模式。我知道通道不是线程安全的,因此每个消费者/线程使用1个通道。
我想知道当单个频道用于消费和发布消息,或接收请求并在我的情况下返回响应时,如下面的代码,来自{{3},是否存在任何问题或效率低下}:
channel.basicConsume(RPC_QUEUE_NAME, false, consumer);
channel.basicPublish("", props.getReplyTo(), replyProps, response.getBytes());
我应该使用两种不同的渠道来消费和发布消息吗?
答案 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/