如果打開重複檢測並且兩個消息具有相同的MessageId,那麼在第一個消息的預定排隊時間之前發送第二個消息是否有效地取消了預定消息?
我用下面的示例代碼做了測試,發現第二條消息將被忽略。
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
for (int i = 0; i < 2; i++)
{
if (i == 0)
{
client.SendAsync(new BrokeredMessage("testmes1") { MessageId = "test1", ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(60) }).Wait();
}
else
{
client.SendAsync(new BrokeredMessage("testmes2") { MessageId = "test1" }).Wait();
}
}
從隊列中接收消息:
client.OnMessage(message =>
{
Console.WriteLine(String.Format("Message body: {0}", message.GetBody<String>()));
Console.WriteLine(String.Format("Message id: {0}", message.MessageId));
});
輸出:
如果您想取消預定的消息,你可以嘗試在此之前調用CancelScheduledMessageAsync() method預定消息變爲活動。
client.CancelScheduledMessageAsync(sequenceNumber).Wait();
根據你的證據,這是很好的知道,重複檢測也檢查預定消息重複的,而不是那些在過去只排隊檢查郵件。我真的有點失望,因爲我的理論行爲會讓我避免存儲預定消息的序列號以便稍後取消它(相反,我將使用消息的業務上下文獨有的MessageId )。感謝您看看這個。 –