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 特定类型如 ServiceBusReceivedMessage
或 ServiceBusReceiver
也不可用。
也就是说,您可以访问消息的系统和应用程序属性。您需要通过以下方式访问 FunctionContext
:
context.BindingContext.BindingData.TryGetValue("CorrelationId", out var label)
如果您需要访问 SDK 类型或自己完成消息,则需要使用 Azure Functions In-Process SDK,Microsoft.NET.Sdk.Functions
.
一个(可能的)解决方案:
确保参数的命名与 src(“合同”)中的完全相同
- ServiceBusClient 客户端 -> 有效
- ServiceBusClient myclient -> 不工作!
我的函数现在是这样的:
(...,string myQueueItem, Int32 deliveryCount, DateTime enqueuedTimeUtc, string messageId,
ServiceBusMessageActions messageActions, ServiceBusMessageActions messageReceiver, ServiceBusClient client)
我正在使用 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 特定类型如 ServiceBusReceivedMessage
或 ServiceBusReceiver
也不可用。
也就是说,您可以访问消息的系统和应用程序属性。您需要通过以下方式访问 FunctionContext
:
context.BindingContext.BindingData.TryGetValue("CorrelationId", out var label)
如果您需要访问 SDK 类型或自己完成消息,则需要使用 Azure Functions In-Process SDK,Microsoft.NET.Sdk.Functions
.
一个(可能的)解决方案:
确保参数的命名与 src(“合同”)中的完全相同
- ServiceBusClient 客户端 -> 有效
- ServiceBusClient myclient -> 不工作!
我的函数现在是这样的:
(...,string myQueueItem, Int32 deliveryCount, DateTime enqueuedTimeUtc, string messageId, ServiceBusMessageActions messageActions, ServiceBusMessageActions messageReceiver, ServiceBusClient client)