0

我有一个 resque 作业在某个事件中运行,最终将消息发布到 RabbitMQ 的交换,我如何检查 bunny(Rabbit MQ ruby​​ 客户端)消息是否已成功发布?

使用确认或任何方式?

提前致谢!

4

2 回答 2

1

当您执行时,publish您不确定消息是否已发布到队列中。

如果你想确定你必须使用你必须使用publish confirmor 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:消息永远不会“放入”交换中,而是始终放入队列中。

于 2016-05-23T08:03:04.120 回答
0

方法返回后publish,消息已发布到队列。发布消息没有延迟操作。

于 2016-05-23T07:30:04.353 回答