gpt4 book ai didi

c# - RabbitMQ - 知道哪条消息被确认

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:54 25 4
gpt4 key购买 nike

我正在尝试发布两条消息并接收 Ack/Nack。下面是我的代码:

using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.BasicAcks += channel_BasicAcks;
channel.BasicNacks += channel_BasicNacks;

channel.QueueDeclare("test", durable, false, false, null);
channel.ConfirmSelect();

var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);

string message = "Hello World!";
var body = Encoding.UTF8.GetBytes(message);

channel.BasicPublish("", "test", properties, body);
channel.BasicPublish("", "test", properties, body);
Console.WriteLine(" [x] Sent {0}", message);

channel.WaitForConfirmsOrDie();
}
}

我的 Ack/Nack 事件

 static void channel_BasicNacks(object sender, RabbitMQ.Client.Events.BasicNackEventArgs e)
{

}

static void channel_BasicAcks(object sender, RabbitMQ.Client.Events.BasicAckEventArgs e)
{

}

对于这两条消息,我完美地收到了两个 Ack 事件调用。我什至可以将 e.DeliveryTag 设置为 1 和 2(我希望这些是我处理的消息的序列号)。

我想知道哪个消息被 acked/nacked 更准确​​,而不是依赖于序列号来执行某些操作。

有没有一种方法可以将唯一标识符附加到消息,并在 Ack/Nack 事件参数中获取相同的 ID,以验证特定消息是否已被确认/取消。谢谢指点。

例如,我一直在轮询一个文件夹并从该文件夹读取文件列表,并将内容发布到队列中。一个文件可能被ack;另一个人可能会被剥夺;我想知道哪个文件被 acked 或 nacked 以便我可以将文件移动到相应的成功/失败文件夹。

最佳答案

AMQP 的 Basic.Ack 方法没有空间容纳用户指定的内容,所以不,您不能使用任意 ID。

但是,您可以 query the next sequence ID这将用于下一次发布,并在本地维护一个映射以将消息与其序列 ID 相关联。

序列 ID 从 1 开始,因此 NextPublishSeqNo() 将在任何发布之前返回 1,在第一次发布之后返回 2,依此类推。

关于c# - RabbitMQ - 知道哪条消息被确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com