RabbitMQ 发布者如何知道消息是否被代理接收

RabbitMQ How can a publisher know if a message was recieved by the 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 之后作为发布者在代理中收到。

您正在寻找 publisher confirms.

您引用的 ACK 用法是针对消费者的,因为 RabbitMQ 需要先确认消息,然后再将其从队列中删除。

请注意,收到已发布消息的确认并不意味着该消息已存储在队列中:该消息可以是 "unroutable",在这种情况下,确认会立即发送给发布者, 但消息被丢弃。参见:When will messages be confirmed

如果您还想跟踪无法路由的消息,则必须使用 Alternate Exchanges