我有一个 resque 作业在某个事件中运行,最终将消息发布到 RabbitMQ 的交换,我如何检查 bunny(Rabbit MQ ruby 客户端)消息是否已成功发布?
使用确认或任何方式?
提前致谢!
我有一个 resque 作业在某个事件中运行,最终将消息发布到 RabbitMQ 的交换,我如何检查 bunny(Rabbit MQ ruby 客户端)消息是否已成功发布?
使用确认或任何方式?
提前致谢!
当您执行时,publish
您不确定消息是否已发布到队列中。
如果你想确定你必须使用你必须使用publish confirm
or tx transaction
。
阅读这篇文章http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/
注意:默认情况下,客户端没有任何 HA 策略,您必须实施它。请参阅以下部分Streaming Lightweight Publisher Confirms
:
private volatile SortedSet<Long> unconfirmedSet =
Collections.synchronizedSortedSet(new TreeSet());
...
ch.setConfirmListener(new ConfirmListener() {
public void handleAck(long seqNo, boolean multiple) {
if (multiple) {
unconfirmedSet.headSet(seqNo+1).clear();
} else {
unconfirmedSet.remove(seqNo);
}
}
public void handleNack(long seqNo, boolean multiple) {
// handle the lost messages somehow
}
});
注意2:消息永远不会“放入”交换中,而是始终放入队列中。
方法返回后publish
,消息已发布到队列。发布消息没有延迟操作。