簡體   English   中英

我無法重試 Azure 服務總線主題中的失敗項目

[英]I can't retry failed item in Azure Service Bus topic

我有一個進程正在使用 Azure 服務總線主題中的項目。 如果一切順利,則沒有問題,但如果過程出錯,我需要重試使用失敗的項目。

這是我的消息處理程序;

public async Task StartRecieverAsync()
    {
        var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
        {
            MaxConcurrentCalls = 1,
            AutoComplete = false,
            MaxAutoRenewDuration = TimeSpan.FromSeconds(30)
        };

        _creatorSubscription.RegisterMessageHandler(ProcessCreatorMessageAsync, messageHandlerOptions);

        Console.ReadLine();

        await _creatorSubscription.CloseAsync();
    }

    private async Task ProcessCreatorMessageAsync(Message message, CancellationToken token)
    {
        try
        {
            var jsonString = Encoding.UTF8.GetString(message.Body);
            PickingRequest req = JsonSerializer.Deserialize<PickingRequest>(jsonString);

            WorkOrderManager manager = new WorkOrderManager(_sqlManager, _cacheManager, _workOrderFunctions);
            manager.CreatePickingTask(req);

            SendNotification(req.UserRegistrationNumber, NotificationConstants.PickingRequestNotification);

            await _creatorSubscription.CompleteAsync(message.SystemProperties.LockToken);
        }
        catch
        {
            if (message.SystemProperties.DeliveryCount < 5)
            {
                await _creatorSubscription.AbandonAsync(message.SystemProperties.LockToken);
            }
            else
            {
                await _creatorSubscription.DeadLetterAsync(message.SystemProperties.LockToken);
            }
        }
    }

起初 5 次,我想再試一次,但結果沒有改變我想將項目發送到死信隊列。 但在第一次之后,該項目進入死信隊列。

服務總線上的主題訂閱是如何配置的? 如果最大傳遞計數為 1,那么在服務總線第一次發生故障后,會將消息移動到死信隊列。 服務總線主題訂閱屬性

  • 此外,通常不需要使用調用DeadLetterAsync手動死信消息,一旦超過最大傳遞計數,服務總線將執行此操作。 即您的 catch 塊可以簡化為await _creatorSubscription.AbandonAsync(message.SystemProperties.LockToken);

暫無
暫無

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

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