Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1)_C#_Azure_Azure Functions_Azureservicebus_Azure Webjobs - Fatal编程技术网

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

C# 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1),c#,azure,azure-functions,azureservicebus,azure-webjobs,C#,Azure,Azure Functions,Azureservicebus,Azure Webjobs,我正在使用.NET Core 3.1编写一个webjob,我的触发器如下所示: public async Task ProcessQueueMessage([ServiceBusTrigger("%ServiceBusProviderConfig:TopicName%", "%ServiceBusProviderConfig:TopicSubscriptionName%", Connection = "ServiceBusConnectionSt

我正在使用.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中的Autocomplete设置为false,以便webjob不会自动完成并从队列中删除

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

  • 在appsettings.json文件中设置如下:

    “扩展”:{ “服务总线”:{ “messageHandlerOptions”:{ “maxConcurrentCalls”:16, “自动完成”:false } } }

  • 但在运行时,它不会从此文件中拾取设置。我不知道为什么,如何才能从本地配置文件读取设置

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

     var messageHandlerOptions = new MessageHandlerOptions(ExceptionHandler)
     {
         AutoComplete = false,
         MaxAutoRenewDuration = new TimeSpan(0, 5, 0), // 5 minutes
         MaxConcurrentCalls = 1,
     };
    
    messageReceiver.RegisterMessageHandler(MessageProcessor, messageHandlerOptions);
    
    静态异步任务消息处理器(消息消息、取消令牌) { wait 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;
        });
    
    上一条评论帮助我将其配置为host.json