簡體   English   中英

失敗的消息不會從 Azure 服務總線觸發函數移動到 DLQ

[英]Failed messages are not moved to DLQ from Azure Servicebus triggerfunction

第一次發帖,請客氣。

我在 Azure 中有一個 Servicebus 觸發器。 function 按預期工作,當消息進入隊列時觸發。 觸發器的主要function是處理消息中的數據並將它們放入另一個外部系統。 但是,無法保證外部系統會接受數據,因此消息處理失敗。 如果發生這種情況,則會引發異常並將消息移動到死信隊列 (DLQ)。 設置了一個計時器觸發器來讀取 DLQ 並將失敗的消息移回主隊列,其中 Servicebus 觸發器再次退出以處理消息。

我現在的問題是失敗的消息沒有移動到 DLQ,它只是消失了。 然而,這並不一致。 有時它會移到 DLQ,但大多數時候不會。

這一直在起作用,並且這周開始發生。

我已經測試了多次將相同的消息發布到隊列中,但不一致仍然存在。 所以我看不出它與隊列中的數據有關。

我已將代碼剝離為下面的代碼,並且體驗相同。

有誰知道可能會發生什么? 我在代碼中看不到它,我還沒有對 Azure 中的服務總線做任何事情,但我懷疑這可能是我忽略的一些設置。

public static void Run([ServiceBusTrigger("xxx", Connection = "xxx")] string myQueueItem, ILogger log)
{
    log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");

    if (myQueueItem == "0")
    {
        log.LogError($"Message failed {myQueueItem}");
        throw new Exception("DLQ test");
    }

}

看起來它畢竟在我的代碼中,現在看起來像預期的那樣工作。

在測試期間,我一直在從主隊列讀取數據,從 DLQ 讀取數據並將 DLQ 消息重新提交回主隊列。 我一直用來接收和發送消息的 SDK 對象似乎一直在阻止處理消息,如果它們沒有在代碼中正確處理:

await sender.DisposeAsync();
await receiver.DisposeAsync();
await client.DisposeAsync();

實施后,事情似乎更穩定了。

暫無
暫無

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

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