Microsoft.Azure.WebJobs.Extensions.ServiceBus 5.16.4
前缀已保留
dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.16.4
NuGet\Install-Package Microsoft.Azure.WebJobs.Extensions.ServiceBus -Version 5.16.4
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.16.4" />
paket add Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.16.4
#r "nuget: Microsoft.Azure.WebJobs.Extensions.ServiceBus, 5.16.4"
// Install Microsoft.Azure.WebJobs.Extensions.ServiceBus as a Cake Addin #addin nuget:?package=Microsoft.Azure.WebJobs.Extensions.ServiceBus&version=5.16.4 // Install Microsoft.Azure.WebJobs.Extensions.ServiceBus as a Cake Tool #tool nuget:?package=Microsoft.Azure.WebJobs.Extensions.ServiceBus&version=5.16.4
Azure WebJobs Service Bus客户端库,适用于.NET
此扩展提供了从Azure Function访问Azure Service Bus的功能。
入门
安装包
使用NuGet安装Service Bus扩展 NuGet
dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus
先决条件
Azure 订阅:要使用 Azure 服务,包括 Azure 服务总线,您需要一个订阅。如果您没有现有的 Azure 账户,您可以考虑注册 免费试用 或在您创建账户时使用您的 Visual Studio 订阅 优惠。
服务总线命名空间:为了与 Azure 服务总线交互,您还需要有一个命名空间可用。如果您不熟悉创建 Azure 资源,您可能希望遵循使用 Azure 门户创建服务总线命名空间的分步指南。在那里,您还可以找到使用 Azure CLI、Azure PowerShell 或 Azure 资源管理器 (ARM) 模板创建服务总线实体的详细说明。
为了快速在 Azure 中创建所需的 Service Bus 资源并获取它们的连接字符串,您可以单击以下链接部署我们的示例模板
认证客户端
为了使服务总线客户端库能够与队列或主题交互,它需要了解如何与之连接和授权。最简单的方法是使用连接字符串,该字符串在创建服务总线命名空间时自动生成。如果您不熟悉 Azure 中的共享访问策略,您可能希望遵循获取服务总线连接字符串的分步指南。
ServiceBusAttribute
和 ServiceBusTriggerAttribute
的 Connection
属性用于指定存储连接字符串的配置属性。如果没有指定,则假定期望 AzureWebJobsServiceBus
属性包含连接字符串。
对于本地开发,请使用 local.settings.json
文件来存储连接字符串
{
"Values": {
"<connection_name>": "Endpoint=sb://<service_bus_namespace>.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=<access key>"
}
}
当部署时,请使用应用程序设置来设置连接字符串。
基于身份的认证
如果您的环境已启用 托管身份,您可以使用它来认证服务总线扩展。在此之前,您将需要确保权限已经如Azure Functions 开发者指南中所描述的那样得到配置。要使用基于身份的认证,请提供 <connection_name>__fullyQualifiedNamespace
配置设置。
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"<connection_name>__fullyQualifiedNamespace": "<service_bus_namespace>.servicebus.windows.net"
}
}
或者,在部署的应用中设置相同的设置在应用程序设置
<connection_name>__fullyQualifiedNamespace=<service_bus_namespace>.servicebus.windows.net
有关配置基于身份的连接的更多详细信息,请参阅此处。
关键概念
Service Bus 触发器
Service Bus 触发器允许当消息发送到 Service Bus 队列或主题时执行函数。
请遵循Azure Service Bus 触发器教程以了解更多关于 Service Bus 触发器的信息。
Service Bus 输出绑定
Service Bus 输出绑定允许函数发送 Service Bus 消息。
请遵循Azure Service Bus 输出绑定以了解更多关于 Service Bus 绑定的信息。
示例
发送单个消息
您可以通过将 ServiceBus
属性应用于函数返回值来将单个消息发送到队列或主题。返回值可以为 string
、byte[]
或 ServiceBusMessage
类型。
[FunctionName("BindingToReturnValue")]
[return: ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")]
public static string BindToReturnValue([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
{
// This value would get stored in Service Bus message body.
// The string would be UTF8 encoded.
return $"C# Timer trigger function executed at: {DateTime.Now}";
}
您还可以使用类型为 string
、byte[]
或 ServiceBusMessage
的 out
参数。
[FunctionName("BindingToOutputParameter")]
public static void Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] out ServiceBusMessage message)
{
message = new ServiceBusMessage($"C# Timer trigger function executed at: {DateTime.Now}");
}
发送多条消息
要从单个 Azure Function 调用中发送多条消息,可以将 ServiceBus
属性应用到 IAsyncCollector<string>
或 IAsyncCollector<ServiceBusReceivedMessage>
参数。
[FunctionName("BindingToCollector")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] IAsyncCollector<ServiceBusMessage> collector)
{
// IAsyncCollector allows sending multiple messages in a single function invocation
await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")));
await collector.AddAsync(new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}")));
}
使用强类型模型进行绑定
要使用与 ServiceBus 绑定的强类型模型类,请将 ServiceBus
属性应用到模型参数。这样做将尝试将 ServiceBusMessage.Body
反序列化为强类型模型。
[FunctionName("TriggerSingleModel")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] Dog dog,
ILogger logger)
{
logger.LogInformation($"Who's a good dog? {dog.Name} is!");
}
使用 ServiceBusSender 发送多条消息
您还可以直接绑定到 ServiceBusSender
,以拥有对消息发送的最大控制权。
[FunctionName("BindingToSender")]
public static async Task Run(
[TimerTrigger("0 */5 * * * *")] TimerInfo myTimer,
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")] ServiceBusSender sender)
{
await sender.SendMessagesAsync(new[]
{
new ServiceBusMessage(new BinaryData($"Message 1 added at: {DateTime.Now}")),
new ServiceBusMessage(new BinaryData($"Message 2 added at: {DateTime.Now}"))
});
}
每条消息触发器
要为每次将消息发送到 Service Bus 队列或订阅而运行函数,请将 ServiceBusTrigger
属性应用到 string
、byte[]
或 ServiceBusReceivedMessage
参数。
[FunctionName("TriggerSingle")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] string messageBodyAsString,
ILogger logger)
{
logger.LogInformation($"C# function triggered to process a message: {messageBodyAsString}");
}
批处理触发器
要为一批接收到的消息运行函数,请将 ServiceBusTrigger
属性应用到 string[]
或 ServiceBusReceivedMessage[]
参数。
[FunctionName("TriggerBatch")]
public static void Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")] ServiceBusReceivedMessage[] messages,
ILogger logger)
{
foreach (ServiceBusReceivedMessage message in messages)
{
logger.LogInformation($"C# function triggered to process a message: {message.Body}");
logger.LogInformation($"EnqueuedTime={message.EnqueuedTime}");
}
}
消息结算
您可以使用 ServiceBusOptions
来配置消息在您的函数执行后自动完成。如果您想对消息结算有更多控制权,可以使用与每条消息和批处理触发器绑定的 MessageActions
。
[FunctionName("BindingToMessageActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>")]
ServiceBusReceivedMessage[] messages,
ServiceBusMessageActions messageActions)
{
foreach (ServiceBusReceivedMessage message in messages)
{
if (message.MessageId == "1")
{
await messageActions.DeadLetterMessageAsync(message);
}
else
{
await messageActions.CompleteMessageAsync(message);
}
}
}
会话触发器
要从启用会话的队列或主题接收消息,您可以在 ServiceBusTrigger
属性上设置 IsSessionsEnabled
属性。在与会话一起工作时,您可以绑定到 SessionMessageActions
以访问消息结算方法,以及会话特定的功能。
[FunctionName("BindingToSessionMessageActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>", IsSessionsEnabled = true)]
ServiceBusReceivedMessage[] messages,
ServiceBusSessionMessageActions sessionActions)
{
foreach (ServiceBusReceivedMessage message in messages)
{
if (message.MessageId == "1")
{
await sessionActions.DeadLetterMessageAsync(message);
}
else
{
await sessionActions.CompleteMessageAsync(message);
}
}
// We can also perform session-specific operations using the actions, such as setting state that is specific to this session.
await sessionActions.SetSessionStateAsync(new BinaryData("<session state>"));
}
绑定到 ReceiveActions
您可以在您的函数调用中接收额外的消息。这在您需要根据传送到您函数的初始消息的某些特征来控制函数调用中要处理的更多消息时可能会有所帮助。您收到的任何附加消息都将受到与初始传送到您的函数的消息相同的 AutoCompleteMessages
和 MaxAutoLockRenewalDuration
配置的影响。您还可以查看消息。已查看的消息不受 AutoCompleteMessages
和 MaxAutoLockRenewalDuration
配置的限制,因为这些消息未被锁定,因此不能完成。
[FunctionName("BindingToReceiveActions")]
public static async Task Run(
[ServiceBusTrigger("<queue_name>", Connection = "<connection_name>", IsSessionsEnabled = true)]
ServiceBusReceivedMessage message,
ServiceBusMessageActions messageActions,
ServiceBusReceiveActions receiveActions)
{
if (message.MessageId == "1")
{
await messageActions.DeadLetterMessageAsync(message);
}
else
{
await messageActions.CompleteMessageAsync(message);
// attempt to receive additional messages in this session
var receivedMessages = await receiveActions.ReceiveMessagesAsync(maxMessages: 10);
// you can also use the receive actions to peek messages
var peekedMessages = await receiveActions.PeekMessagesAsync(maxMessages: 10);
}
}
绑定到 ServiceBusClient
在某些情况下,您可能希望绑定到与触发器使用相同的 ServiceBusClient
。这在您需要根据接收到的消息动态创建发送者时很有用。
[FunctionName("BindingToClient")]
public static async Task Run(
[ServiceBus("<queue_or_topic_name>", Connection = "<connection_name>")]
ServiceBusReceivedMessage message,
ServiceBusClient client)
{
ServiceBusSender sender = client.CreateSender(message.To);
await sender.SendMessageAsync(new ServiceBusMessage(message));
}
故障排除
如果您的函数触发了未处理的异常,并且您尚未解决消息,扩展将尝试弃用消息,以便它立即再次可用于接收。
有关更多故障排除指导,请参阅 监控 Azure Functions。
下一步
阅读 Azure Functions 简介 或 创建 Azure Function 指南。
贡献
有关构建、测试和对该库做出贡献的详细信息,请参阅我们的 CONTRIBUTING.md。
本项目欢迎贡献和建议。大多数贡献都需要您同意一项贡献者许可协议 (CLA),声明您有权,并且确实授予我们使用您贡献的权利。有关详细信息,请访问 cla.microsoft.com。
本项目采用 Microsoft 开源行为准则。有关更多信息,请参阅 行为准则常见问题解答 或联系 [email protected] 就任何附加问题或评论。
产品 | 版本 兼容和额外的计算目标框架版本。 |
---|---|
.NET | net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。 |
.NET Core | netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.0 兼容。 netstandard2.1 已计算。 |
.NET Framework | net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen40 已计算。 tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.0
- Azure.Messaging.ServiceBus (>= 7.18.1)
- Microsoft.Azure.WebJobs (>= 3.0.37)
- Microsoft.Extensions.Azure (>= 1.7.4)
-
net6.0
- Azure.Messaging.ServiceBus (>= 7.18.1)
- Google.Protobuf (>= 3.24.3)
- Microsoft.Azure.WebJobs (>= 3.0.37)
- Microsoft.Azure.WebJobs.Extensions.Rpc (>= 3.0.37)
- Microsoft.Extensions.Azure (>= 1.7.4)
NuGet 包 (23)
显示依赖于 Microsoft.Azure.WebJobs.Extensions.ServiceBus 的前 5 个 NuGet 包
包 | 下载 |
---|---|
MassTransit.WebJobs.ServiceBus MassTransit Azure WebJobs Service Bus 支持;MassTransit 提供了一个面向开发者、现代化的分布式应用程序创建平台,简单且无复杂性。 |
|
NServiceBus.AzureFunctions.InProcess.ServiceBus NServiceBus.AzureFunctions.InProcess.ServiceBus |
|
Microsoft.Azure.Workflows.WebJobs.Extension 适用于在Azure Functions中运行工作流的扩展 |
|
UnitTestEx
UnitTestEx 测试扩展。 |
|
Energinet.DataHub.Core.Messaging 【发布说明】(https://github.com/Energinet-DataHub/geh-core/blob/master/source/Messaging/documents/release-notes/release-notes.md) 【文档】(https://github.com/Energinet-DataHub/geh-core/blob/master/source/Messaging/documents/documentation.md) |
GitHub仓库 (17)
显示依赖Microsoft.Azure.WebJobs.Extensions.ServiceBus的Top 5流行GitHub仓库
仓库 | 星星 |
---|---|
MassTransit/MassTransit
.NET分布式应用程序框架
|
|
Azure-Samples/cognitive-services-speech-sdk
Microsoft Cognitive Services Speech SDK的示例代码
|
|
mspnp/cloud-design-patterns
在Azure架构中心找到的云设计模式的示例实现。
|
|
Azure/azure-webjobs-sdk
Azure WebJobs SDK
|
|
WolfgangOfner/MicroserviceDemo
是一个使用RabbitMQ和Docker的ASP .NET 6微服务的演示。
|
版本 | 下载 | 最后更新 |
---|---|---|
5.16.4 | 12,648 | 8/8/2024 |
5.16.3 | 13,682 | 8/2/2024 |
5.16.2 | 12,209 | 7/25/2024 |
5.16.1 | 389,584 | 6/13/2024 |
5.16.0 | 145,022 | 5/30/2024 |
5.15.1 | 513,066 | 4/17/2024 |
5.14.0 | 268,074 | 3/14/2024 |
5.13.6 | 78,636 | 3/5/2024 |
5.13.5 | 1,851,220 | 12/4/2023 |
5.13.4 | 948,721 | 11/9/2023 |
5.13.3 | 654,818 | 10/20/2023 |
5.13.2 | 60,507 | 10/18/2023 |
5.13.1 | 333,355 | 10/17/2023 |
5.13.0 | 69,861 | 10/11/2023 |
5.12.0 | 1,202,636 | 8/14/2023 |
5.11.0 | 1,456,375 | 6/6/2023 |
5.10.0 | 340,533 | 5/10/2023 |
5.9.0 | 1,533,900 | 2/23/2023 |
5.8.1 | 2,869,499 | 11/10/2022 |
5.8.0 | 1,020,650 | 10/11/2022 |
5.7.0 | 3,060,841 | 8/12/2022 |
5.6.0 | 363,835 | 7/28/2022 |
5.5.1 | 1,172,154 | 6/8/2022 |
5.5.0 | 627,746 | 5/17/2022 |
5.4.0 | 594,642 | 5/11/2022 |
5.3.0 | 1,382,744 | 3/9/2022 |
5.2.0 | 1,869,374 | 12/9/2021 |
5.1.0 | 519,759 | 11/11/2021 |
5.0.0 | 333,404 | 10/26/2021 |
5.0.0-beta.6 | 88,664 | 9/8/2021 |
5.0.0-beta.5 | 131,885 | 7/9/2021 |
5.0.0-beta.4 | 33,403 | 6/22/2021 |
5.0.0-beta.3 | 34,876 | 5/19/2021 |
5.0.0-beta.2 | 25,045 | 4/9/2021 |
5.0.0-beta.1 | 34,732 | 3/24/2021 |
4.3.1 | 472,667 | 6/3/2022 |
4.3.0 | 4,302,027 | 4/28/2021 |
4.2.2 | 480,555 | 4/14/2021 |
4.2.1 | 3,187,866 | 1/25/2021 |
4.2.0 | 1,934,397 | 9/23/2020 |
4.1.2 | 1,881,196 | 6/1/2020 |
4.1.1 | 1,223,844 | 3/3/2020 |
4.1.0 | 2,256,001 | 1/3/2020 |
4.0.0 | 375,266 | 11/19/2019 |
3.2.0 | 309,951 | 10/29/2019 |
3.1.1 | 422,988 | 10/1/2019 |
3.1.0 | 266,842 | 9/19/2019 |
3.1.0-beta4 | 19,194 | 8/5/2019 |
3.1.0-beta3 | 26,955 | 6/5/2019 |
3.1.0-beta2 | 7,300 | 5/10/2019 |
3.1.0-beta1 | 3,470 | 5/2/2019 |
3.0.6 | 898,797 | 6/26/2019 |
3.0.5 | 359,302 | 5/3/2019 |
3.0.4 | 218,623 | 3/29/2019 |
3.0.3 | 955,418 | 1/25/2019 |
3.0.2 | 232,138 | 12/5/2018 |
3.0.1 | 252,920 | 10/17/2018 |
3.0.0 | 477,124 | 9/19/2018 |
3.0.0-rc1 | 5,990 | 9/14/2018 |