Azure Function 的服务总线 PeekLock 问题

Service Bus PeekLock issue with Azure Function

我的服务总线主题中有多条消息,我想在服务总线触发器上一条一条地处理这条消息,它应该获取所有未处理的消息。因为我正在进行测试和调试,所以我不希望消息完成,即如果它没有完成,它就会留在主题中供任何其他服务使用。

我从带有服务总线主题触发器的 Azure Function App 开始,一直到这里,我在日志中收到了所有消息,但是一旦完成,我就没有收到任何其他消息,因为所有消息都已经消费了,他们转移到“死信消息计数”,所以我很难进行任何调试和测试。

我想知道如何使用 Azure Function Service Bus 触发器处理这个问题,我 运行 函数在控制台中看到我的消息正文,退出它,然后进行必要的转换,然后重复过程。没有服务总线触发器,我可以使用 PeekLock 东西来完成它并且不允许完成任何消息,但是我如何使用 Function 来完成它,因为它似乎立即接收消息以进行触发。

 namespace ServiceBusCopyFunction
{
    public static class GetMetadataFromSB
    {
        static ISubscriptionClient subscriptionClient;
        [FunctionName("GetMetadataFromSB")]
        public static void Run([ServiceBusTrigger("TopicNameSB", "SubscriptionNameSB", Connection = "AzureServiceBusString")] string mySbMsg, ILogger log)
        {
            log.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");

        }
    }
}

您可以在 host.json 文件中停用 autoComplete 功能。这是参考: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-output?tabs=csharp#hostjson-settings

示例:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "messageHandlerOptions": {
                "autoComplete": false
            }
        }
    }
}

所以消息在处理后不会完成。