我想發佈兩條消息並收到Ack/Nack。下面是我的代碼:RabbitMQ - 知道哪些消息是Acked
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(我希望那些是我處理的消息的序列號)。
我想知道哪個消息更精確,而不是依賴於序列號來執行某些操作。
有沒有辦法,我可以追加一個唯一的標識符來消息,並得到相同的ID回的Ack/Nack事件參數來驗證一個特定的消息獲得確認/ NACK的一種方式。感謝您的指點。
讓我們說,例如,我一直輪詢一個文件夾,該文件夾中的文件的閱讀清單和內容發佈到隊列。一個文件可能會被抄襲;另一個可能被扼殺;我想知道哪個文件被ack或nacked,以便我可以將文件移動到各自的成功/失敗的文件夾。
在這種情況下,我想我必須在分配順序我的文件運行時間,並記住這個順序,直到我得到所有acks/nacks。 – techspider
是的,這將工作。 –