C# 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1)
我正在使用.NET Core 3.1编写一个webjob,我的触发器如下所示: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
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不会自动完成并从队列中删除
但是我很难设置这个值。我试过:
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