java - Java RabbitMQ 客户端中的ConfirmListener是否必须同步?

标签 java multithreading synchronization rabbitmq

我想知道当我们收到 ACK 时会发生什么。我们是在单个线程中还是在多个线程中接收 ACK?
handleAck和handleNack方法是由单个线程还是多个线程使用?如果它们被单个线程使用那么就可以了。但如果它们被多个线程使用,那么我们必须以线程安全的方式构造我们的代码。

最佳答案

您不需要将 ConfirmListener 代码编写为线程安全的,但这不是因为 acknack 方法不会被调用来自多个线程,但因为您不应该在线程之间共享 Channel

documentation特别指出这一点:

While some operations on channels are safe to invoke concurrently, some are not and will result in incorrect frame interleaving on the wire. Sharing channels between threads will also interfere with * Publisher Confirms.

当您向代理发布时,请不要共享 channel 。 channel 是轻量级的,创建起来并不昂贵。这样你也不必担心确认。

如果您确实共享 channel ,您的确认将根据上述引用受到干扰。

关于java - Java RabbitMQ 客户端中的ConfirmListener是否必须同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900431/

相关文章:

java - 将 JBOSS 注释转换为 xml

C 多线程控制与信号量

java - 在 Java 中启动、停止和监听进程

java - 同步同一个类中的静态方法

javascript - 如何在 NodeJS 中将音乐播放器同步到多个客户端

java - java中从字符串中提取mac地址

Java 字节码 : Customized setter/getter with byte buddy

java - 字符串仅包含 2 个整数 - Java

c - 多线程程序未产生所需的输出

multithreading - 在汇编语言级别如何实现线程同步?