我在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之后邮件是作为发布者在代理中收到的。
答案 0 :(得分:1)
您正在寻找publisher confirms。
您引用的ACK的用法是针对消费者的,因为RabbitMQ需要在将消息从队列中删除之前确认消息。
请注意,接收已发布邮件的确认信息并不意味着该邮件已存储在队列中:该邮件可以是" unroutable",在这种情况下,确认将发送给发布者马上,但消息丢弃了。请参阅:When will messages be confirmed
如果您还要跟踪不可线路的消息,则必须使用Alternate Exchanges。