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。
我在 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。