Azure Functions V4 // ServiceBusTrigger 和绑定属性,如 Message 或 MessageReceiver

Azure Functions V4 // ServiceBusTrigger and binding properties like Message or MessageReceiver

我正在使用 ServiceBusTrigger 为队列开发 Azure Function(进程内模型,V 4.1)。该功能工作正常并被触发。该函数如下所示:

    public async Task Run([ServiceBusTrigger("my-queue", Connection = "myConnectionString", AutoCompleteMessages = true)]
        string myQueueItem, Int32 deliveryCount, DateTime enqueuedTimeUtc, string messageId)

我现在希望能够获取我在消息中传递的 correlationId,并且我希望能够自己“完成 ()”消息。

我查看了此处的文档 (https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=in-process%2Cextensionv5&pivots=programming-language-csharp),但没有找到任何方法来绑定其他参数,例如 Message、MessageReceiver 等。每当我尝试使用这些参数时,当函数运行。

这些是我正在使用的相关包

<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.7.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Core" Version="1.4.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.3.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.0" />

我一定是遗漏了什么...任何提示都将不胜感激!

编辑:清理后,这些是相关的包:

<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.3.0" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.3" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.0" />

I am working on an Azure Function (in-process model, V 4.1)

你不是。

<PackageReference Include="Microsoft.Azure.Functions.Worker.Core" Version="1.4.0" />

根据您使用的 NuGet 包,SDK 是 out-of-process / Isolated Worker SDK。使用 Isolated Worker SDK,您无法自己完成消息。这只有使用 In-Process SDK 才有可能。此外,SDK 特定类型如 ServiceBusReceivedMessageServiceBusReceiver 也不可用。

也就是说,您可以访问消息的系统和应用程序属性。您需要通过以下方式访问 FunctionContext

context.BindingContext.BindingData.TryGetValue("CorrelationId", out var label)

如果您需要访问 SDK 类型或自己完成消息,则需要使用 Azure Functions In-Process SDK,Microsoft.NET.Sdk.Functions.

一个(可能的)解决方案:

查看源码: https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/servicebus/Microsoft.Azure.WebJobs.Extensions.ServiceBus/src/Triggers/ServiceBusTriggerBindingStrategy.cs#L77

确保参数的命名与 src(“合同”)中的完全相同

  • ServiceBusClient 客户端 -> 有效
  • ServiceBusClient myclient -> 不工作!

我的函数现在是这样的:

(...,string myQueueItem, Int32 deliveryCount, DateTime enqueuedTimeUtc, string messageId, ServiceBusMessageActions messageActions, ServiceBusMessageActions messageReceiver, ServiceBusClient client)