gpt4 book ai didi

c# - 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1)

转载 作者:行者123 更新时间:2023-12-02 06:05:42 24 4
gpt4 key购买 nike

我正在使用 .NET Core 3.1 编写一个 webjob,我的触发器如下所示:

public async Task ProcessQueueMessage([ServiceBusTrigger("%ServiceBusProviderConfig:TopicName%", "%ServiceBusProviderConfig:TopicSubscriptionName%", Connection = "ServiceBusConnectionString")] Message message, MessageReceiver messageReceiver, TraceWriter log, TextWriter textWriter)

我正在按照以下方式处理消息并调用完整/死信:

await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);

但是,这会引发错误: 提供的锁无效。锁已过期,或者消息已从队列中删除,或者由不同的接收器实例接收。

我知道我需要以某种方式将 MessageHandlerOptions 中的自动完成设置为 false,以便 Web 作业不会自动完成它并从队列中删除。

但我很难设置这个值。我尝试过:

  1. 在 appsettings.json 文件中进行如下设置:

    “扩展”:{“服务总线”:{“消息处理选项”:{“最大并发调用数”:16,“自动完成”:假}}}

但是在运行时,它不会从此文件中选择设置。我不知道为什么,如何从本地配置文件读取设置?

  • 我还尝试为 MessageHandlerOptions 创建一个对象,但签名缺少必需的参数,这使得无法执行此操作。例如:

     var messageHandlerOptions = new MessageHandlerOptions(ExceptionHandler)
    {
    AutoComplete = false,
    MaxAutoRenewDuration = new TimeSpan(0, 5, 0), // 5 minutes
    MaxConcurrentCalls = 1,
    };

    messageReceiver.RegisterMessageHandler(MessageProcessor, messageHandlerOptions);

    静态异步任务消息处理器(消息消息,CancellationToken token ){等待 messageReceiver.CompleteAsync(message.SystemProperties.LockToken);}

  • 我无法在 MessageProcessor 中访问 messageReceiver,这就是为什么这也是不可能的。

    有人可以建议我如何在配置文件中设置 ServiceBusOptions 以在运行时读取吗?

    仅供引用,我正在使用以下软件包:

    1. Microsoft.Azure.ServiceBus Version="4.1.3"
    2. Microsoft.Azure.WebJobs.Extensions Version="3.0.0"
    3. Microsoft.Azure.WebJobs.Extensions.ServiceBus Version="3.0.0"
    4. Microsoft.Azure.WebJobs.Extensions.Storage Version="4.0.2"
    5. Microsoft.Azure.WebJobs.Logging.ApplicationInsights Version="3.0.14"

    最佳答案

    经过一番查找,终于找到了答案。将其发布给任何寻找相同问题的人:

        services.AddServiceBus(options =>
    {
    options.ConnectionString = "ServiceBusConnectionString";
    options.MessageHandlerOptions.AutoComplete = false;
    options.PrefetchCount = 1;
    options.MessageHandlerOptions.MaxConcurrentCalls = 1;
    });

    关于c# - 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62819638/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com