RabbitMQ发布者如何知道代理是否收到了消息

时间:2018-03-14 11:05:25

标签: rabbitmq broker

我在java中使用RabbitMQ。我想发布多条消息,知道经纪人是否收到了消息。请注意,我不想知道消息是否已被确认。我发现的例子似乎依赖于客户端发送basicAck或Nack。

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
    }
});

我只想知道在basicPublish之后邮件是作为发布者在代理中收到的。

1 个答案:

答案 0 :(得分:1)

您正在寻找publisher confirms

您引用的ACK的用法是针对消费者的,因为RabbitMQ需要在将消息从队列中删除之前确认消息。

请注意,接收已发布邮件的确认信息并不意味着该邮件已存储在队列中:该邮件可以是" unroutable",在这种情况下,确认将发送给发布者马上,但消息丢弃了。请参阅:When will messages be confirmed

如果您还要跟踪不可线路的消息,则必须使用Alternate Exchanges