簡體   English   中英

延遲消息並保持傳遞計數 Azure 服務總線

[英]Delay Message and Maintain Delivery Count Azure Service Bus

當我們從 Azure 服務總線隊列中提取消息時,我們有一個場景,並且由於某種原因,如果向下 stream 之一關閉,而不是我們希望延遲消息並放回隊列。 我知道我們可以通過多種方式(設置屬性 ScheduledEnqueueTime 或使用 Schedule API)但無論哪種方式,我們都必須創建一條新消息並放回隊列,這將丟失傳遞計數,也可能導致我們遇到的問題重復消息,其中發送克隆和完成原始消息不是原子操作,其中一個失敗。

https://www.markheath.net/post/defer-processing-azure-service-bus-message

根據上面的文章,唯一的方法似乎是擁有我們的自定義屬性,這仍然是唯一的方法,因為這篇文章是在 2016 年寫的。

重新安排新郵件不會增加傳遞計數。 正如您所說,發送消息和完成消息不是原子的,它可以在事務的幫助下是原子的,從而確保屬於給定操作組的所有操作共同成功或失敗。

這是一個例子:

ServiceBusClient client = new ServiceBusClient("<connection-string>");
ServiceBusReceiver serviceBusReceiver = client.CreateReceiver("<queue>");
ServiceBusSender serviceBusSender = client.CreateSender("<queue>");

var message = await serviceBusReceiver.ReceiveMessageAsync();
// Your condition to handle the down stream
if (true)
{
    using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
    {
        await serviceBusReceiver.CompleteMessageAsync(message);
        var newMessage = new ServiceBusMessage(message);
        newMessage.ScheduledEnqueueTime = new DateTimeOffset(DateTime.UtcNow.AddMinutes(1));
        await serviceBusSender.SendMessageAsync(newMessage);
        ts.Complete();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM