检查RabbitMQ的状态,是否发布消息?

时间:2016-05-23 07:22:09

标签: ruby-on-rails ruby rabbitmq resque bunny

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

使用确认还是以任何方式?

提前致谢!

2 个答案:

答案 0 :(得分:1)

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

如果您想确定必须使用,则必须使用publish confirmtx 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:邮件永远不会被放置&#34;在交换中,但总是在队列中。

答案 1 :(得分:0)

package unary type unary int////not visible outside of the package unary const ( Positive unary = 1//visible outside of the package unary Negative unary = -1//visible outside of the package unary ) func (u unary) String() string {//visible outside of the package unary if u == Positive { return "+" } return "-" } func (u unary) CalExpr() int {//visible outside of the package unary if u == Positive { return 1 } return -1 } 方法返回后,消息已发布到队列中。发布消息没有延迟的操作。