【问题标题】:I can't retry failed item in Azure Service Bus topic我无法重试 Azure 服务总线主题中的失败项目
【发布时间】:2022-01-05 07:34:35
【问题描述】:

我有一个进程正在使用 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 次,我想再试一次,但结果没有改变我想将项目发送到死信队列。但在第一次之后,该项目进入死信队列。

【问题讨论】:

    标签: c# .net azureservicebus azure-servicebus-queues azure-servicebus-topics


    【解决方案1】:

    如何在服务总线上配置主题订阅?如果最大传递计数为 1,则在服务总线第一次发生故障后,会将消息移动到死信队列。 服务总线主题订阅属性:

    • 此外,通常没有必要通过调用DeadLetterAsync 手动死信消息,一旦超过最大传递计数,服务总线将执行此操作。即你的 catch 块可以简化为 await _creatorSubscription.AbandonAsync(message.SystemProperties.LockToken);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2019-07-25
      • 2021-12-04
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多