我正在使用Java在RabbitMQ中实现请求/回复模式。我知道通道不是线程安全的,因此每个使用者/线程使用1个通道。
我想知道在单个频道用于消费和发布消息,或者在我的情况下接收请求和返回响应时是否存在任何问题或效率低下,如下面的代码,它来自here:
channel.basicConsume(RPC_QUEUE_NAME, false, consumer);
channel.basicPublish("", props.getReplyTo(), replyProps, response.getBytes());
我应该使用两个不同的渠道来消费和发布消息吗?
根据Rabbitmq java api指南 - https://www.rabbitmq.com/api-guide.html
在一个线程中使用并在共享通道上的另一个线程中发布可能是安全的。
在渠道和并发注意事项(线程安全)部分中提到。
您应该使用不同的连接进行发布和使用,因为RabbitMQ可以限制发布连接。如果您的消费者处于相同的连接中,他们也可能会被阻止。
https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/