- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道当我们收到 ACK 时会发生什么。我们是在单个线程中还是在多个线程中接收 ACK?
handleAck和handleNack方法是由单个线程还是多个线程使用?如果它们被单个线程使用那么就可以了。但如果它们被多个线程使用,那么我们必须以线程安全的方式构造我们的代码。
最佳答案
您不需要将 ConfirmListener
代码编写为线程安全的,但这不是因为 ack
和 nack
方法不会被调用来自多个线程,但因为您不应该在线程之间共享 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/
使用 RabbitMQ 的官方 java API,一旦我有了 Channel 类的实例,我就可以通过调用 theChannel.confirmSelect() 将其置于发布者确认模式。这只是将 cha
我是一名优秀的程序员,十分优秀!