[英]RabbitMQ Verify Message Was Sent
这个问题已经存在并得到回答。 但是答案中有阴暗面。 我的频道已经支持BasicAcks
和BasicNacks
处理程序(以一种糟糕的方式):
Channel.BasicAcks += (sender, eventArgs) =>
{
Console.WriteLine("Basic Ack!");
}
Channel.BasicNacks += (sender, eventArgs) =>
{
Console.WriteLine("Basic Nack!");
}
我有一条消息发布到队列中。 所以我用这段代码来做到这一点:
Channel.BasicPublish("ExchangeName", "QueueName", messageProperties, payload);
Channel.WaitForConfirmOrDie();
只要WaitForConfirmOrDie
是void函数,如何知道队列是否接收到消息? 或更准确地说,如何实现Ack
处理程序以使我清楚地了解已发布消息的状态,以便不再将其再次发送到队列中,或者在BasicNack
的情况下BasicNack
再次发送它?
使用BasicAcks
和BasicNacks
事件处理程序是独立调用的Channel.WaitForConfirmOrDie
。
Channel.WaitForConfirmOrDie
是一种同步等待消息确认的便捷方法。 因此,如果您一一发布消息,则将一一等待这些提示。 可以想象,这效率很低。
您应该做的就是像完成操作一样注册BasicAcks
和BasicNacks
。 您应该定义“可接受的未完成确认数”。 这是实现此目的的一种方法-
N
条没有确认/否的邮件( N
由您决定)。 如果下一条消息超过N
则不要继续发布消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.