【问题标题】:Consume and publish messages on the same channel在同一频道上消费和发布消息
【发布时间】:2026-01-10 22:05:01
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java multithreading rabbitmq message-queue mq


    【解决方案1】:

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

    在一个线程中消费并在共享通道上的另一个线程中发布是安全的。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】: