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                
此命令旨在在Visual Studio的包管理器控制台中使用,因为它使用了NuGet模块的 Install-Package 版本。
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="5.16.4" />                
对于支持 PackageReference 的项目,将此XML节点复制到项目文件中以引用此包。
paket add Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.16.4                
#r "nuget: Microsoft.Azure.WebJobs.Extensions.ServiceBus, 5.16.4"                
#r指令可以用于F# Interactive和Polyglot Notebooks中。将此内容复制到交互式工具或脚本的源代码中,以引用此包。
// 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 资源并获取它们的连接字符串,您可以单击以下链接部署我们的示例模板

Deploy to Azure

认证客户端

为了使服务总线客户端库能够与队列或主题交互,它需要了解如何与之连接和授权。最简单的方法是使用连接字符串,该字符串在创建服务总线命名空间时自动生成。如果您不熟悉 Azure 中的共享访问策略,您可能希望遵循获取服务总线连接字符串的分步指南。

ServiceBusAttributeServiceBusTriggerAttributeConnection 属性用于指定存储连接字符串的配置属性。如果没有指定,则假定期望 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 属性应用于函数返回值来将单个消息发送到队列或主题。返回值可以为 stringbyte[]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}";
}

您还可以使用类型为 stringbyte[]ServiceBusMessageout 参数。

[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 属性应用到 stringbyte[]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

您可以在您的函数调用中接收额外的消息。这在您需要根据传送到您函数的初始消息的某些特征来控制函数调用中要处理的更多消息时可能会有所帮助。您收到的任何附加消息都将受到与初始传送到您的函数的消息相同的 AutoCompleteMessagesMaxAutoLockRenewalDuration 配置的影响。您还可以查看消息。已查看的消息不受 AutoCompleteMessagesMaxAutoLockRenewalDuration 配置的限制,因为这些消息未被锁定,因此不能完成。

[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 已计算。
兼容的目标框架
包含的目标框架(在包中)
有关 目标框架.NET 标准的更多信息

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