我正在使用Java在RabbitMQ中实现请求/回复模式。我知道通道不是线程安全的,所以每个消费者/线程使用一个通道。
我想知道当一个通道同时用于消费和发布消息,或者在我的情况下接收请求和返回响应时,是否有任何问题或无效性,就像下面的代码一样,它来自这里:
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/