簡體   English   中英

如何避免消息進入`deadletter`隊列azure服務總線

[英]How to avoid message going to `deadletter` queue azure service bus

我正在使用來自服務總線主題/訂閱的消息。 ProcessMessage將消息添加到一個容量有界隊列(一次不超過 200 條消息)。 完成一條消息處理后,我將其ProcessMessage CompleteAsync ,僅當ProcessMessage給出true

現在,如果發生某些異常,例如隊列已滿並且未准備好接收任何新消息,那么我將生成異常並且ProcessMessage給出false 在這種情況下_subscriptionClient.CompleteAsync未調用,但消息將進入deadletter隊列。

如何防止這種情況? 消息不應該進入deadletter隊列,它應該等待一段時間來處理?

注意 - 我根據評論建議添加了AbandonAsync邏輯,但消息仍然會變成死信並且不會重新出現在主題訂閱中。 請建議!

最大交付次數 = 5,嘗試了 5 次,然后移至死信

_subscriptionClient = new SubscriptionClient(connectionString, topicName, subscriptionName);

            _subscriptionClient.RegisterMessageHandler(
                async (message, token) =>
                {
                    if (await ProcessMessage(message, token))
                    {
                        await _subscriptionClient.CompleteAsync(message.SystemProperties.LockToken);
                    }
                    else
                    {
                        await _subscriptionClient.AbandonAsync(message.SystemProperties.LockToken);
                    }
                },
                
                new MessageHandlerOptions(ExceptionReceivedHandler) { MaxConcurrentCalls = 1, AutoComplete = false });


  private async Task<bool> ProcessMessage(Message message, CancellationToken token)
    {
       var processed = false;
       try
        {
           //adding message to queue for further process
           processed = true;
           
        }
        catch
        {
            //in case  queue  is full, generating exception and return false
            processed = false;
        }

        return processed;
    }

我的理解是,如果未處理/未完成,您希望消息變成死信。

每當消息已傳送到客戶端時 - 但由於任何原因尚未完成 - 該消息的傳送計數將自動增加 1。 當傳遞計數與 MaxDeliveryCount 的計數匹配時 - 消息將自動移至死信隊列。

話雖如此,在達到特定消息的最大傳遞計數時,無法在不增加傳遞或禁用消息到死信隊列的移動的情況下傳遞消息。

話雖如此,可能有兩種可能的解決方案可以非常符合您的要求:

  • 有一個非常大的 MaxDelivery Count。
  • 使用 Deadletter 隊列中的消息 - 將數據重新發送到隊列 - 這在您的場景中可能沒有用。 但只是想將其添加為建議 - 以防萬一。

暫無
暫無

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

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