您现在访问的是微软AZURE全睃版技术文档网站,若需覝访问由世纪互蝔违蝥的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

Azure Functions 的 Azure 服务总线绑定

Azure Functions 通过触发器和绑定Azure 服务总线集成。 与服务总线集成后,你可以构建响应和发送队列或主题消息的函数。

操作 类型
创建服务总线队列或主题消息时运行函数 触发器
发送 Azure 服务总线消息 输出绑定

添加到 Functions 应用

Functions 2.x 及更高版本

使用触发器和绑定需要引用相应的包。 NuGet 包用于 .NET 类库,而扩展捆绑包用于其他所有应用程序类型。

语言 添加方式... 备注
C# 安装 NuGet 包版本 4.x
C# 脚本、Java、JavaScript、Python、PowerShell 注册扩展捆绑包 建议将 [Azure Tools 扩展]用于 Visual Studio Code。
C# 脚本(Azure 门户中仅限联机) 添加绑定 若要更新现有绑定扩展而不必重新发布函数应用,请参阅更新扩展

服务总线扩展 5.x 及更高版本

新版本的服务总线绑定扩展以预览版提供。 它引入了使用标识而不是机密进行连接的功能。 对于 .NET 应用程序,它还会更改你可以绑定到的类型,并将 Microsoft.ServiceBus.MessagingMicrosoft.Azure.ServiceBus 中的类型替换为 Azure.Messaging.ServiceBus 中的新类型。

此扩展版本以预览版 NuGet 包提供,或者可以通过在 host.json 文件中添加以下内容从预览版扩展捆绑包 v3 进行添加:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[3.*, 4.0.0)"
  }
}

要了解详细信息,请参阅更新扩展

Functions 1.x

Functions 1.x 应用会自动引用 Microsoft.Azure.WebJobs NuGet 程序包(版本 2.x)。

host.json 设置

本部分介绍版本 2.x 及更高版本中可用于此绑定的配置设置。 host.json 文件中的设置将应用于函数应用实例中的所有函数。 下面的示例 host.json 文件仅包含此绑定的 2.x 版及更高版本设置。 若要详细了解版本 2.x 及更高版本中的函数应用配置设置,请参阅 Azure Functions 的 host.json 参考

备注

有关 Functions 1.x 中 host.json 的参考,请参阅 Azure Functions 1.x 的 host.json 参考

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "prefetchCount": 100,
            "messageHandlerOptions": {
                "autoComplete": true,
                "maxConcurrentCalls": 32,
                "maxAutoRenewDuration": "00:05:00"
            },
            "sessionHandlerOptions": {
                "autoComplete": false,
                "messageWaitTimeout": "00:00:30",
                "maxAutoRenewDuration": "00:55:00",
                "maxConcurrentSessions": 16
            },
            "batchOptions": {
                "maxMessageCount": 1000,
                "operationTimeout": "00:01:00",
                "autoComplete": true
            }
        }
    }
}

如果将 isSessionsEnabled 设置为 true,则采用 sessionHandlerOptions。 如果将 isSessionsEnabled 设置为 false,则采用 messageHandlerOptions

属性 默认 说明
prefetchCount 0 获取或设置消息接收方可以同时请求的消息数。
messageHandlerOptions.maxAutoRenewDuration 00:05:00 自动续订消息锁的最长持续时间。
messageHandlerOptions.autoComplete 是触发器在处理后自动调用 complete,还是函数代码手动调用 complete。

仅在 C# 中支持将其设置为 false

如果设置为 true,则触发器会在函数执行成功完成时自动完成该消息,否则会放弃该消息。

设置为 false 时,你负责调用 MessageReceiver 方法来完成、放弃消息或将消息放入死信队列。 如果引发了异常(并且未调用任何 MessageReceiver 方法),则锁仍然存在。 锁到期后,消息会重新排队,同时 DeliveryCount 会递增,并且锁会自动续订。

在非 C# 函数中,函数中的异常会导致运行时在后台调用 abandonAsync。 如果未发生异常,则在后台调用 completeAsync
messageHandlerOptions.maxConcurrentCalls 16 对于每个缩放实例,消息泵应对回调发起的最大并发调用数。 默认情况下,Functions 运行时同时处理多条消息。
sessionHandlerOptions.maxConcurrentSessions 2000 每个缩放实例可以并发处理的最大会话数。
batchOptions.maxMessageCount 1000 触发时发送到函数的最大消息数。
batchOptions.operationTimeout 00:01:00 hh:mm:ss 表示的时间跨度值。
batchOptions.autoComplete 请参阅上面对 messageHandlerOptions.autoComplete 的说明。

版本 5.x+ 的其他设置

下面的示例 host.json 文件仅包含服务总线扩展的 5.0.0 版及更高版本的设置。

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessages": 1000,
            "sessionIdleTimeout": "00:01:00"
        }
    }
}

使用服务总线扩展 5.x 及更高版本时,除了 ServiceBusOptions 中的 2.x 设置外,还支持以下全局配置设置。

属性 默认 说明
prefetchCount 0 获取或设置消息接收方可以同时请求的消息数。
autoCompleteMessages true 确定是否在成功执行函数后自动完成消息。应该用来替换 autoComplete 配置设置。
maxAutoLockRenewalDuration 00:05:00 此属性应该用来替换 maxAutoRenewDuration
maxConcurrentCalls 16 对于每个缩放实例,消息泵应对回调发起的最大并发调用数。 默认情况下,Functions 运行时同时处理多条消息。
maxConcurrentSessions 8 每个缩放实例可以并发处理的最大会话数。
maxMessages 1000 将传递给每个函数调用的消息的最大数量。 这仅适用于接收一批消息的函数。
sessionIdleTimeout 不适用 当前活动会话等待某个消息被接收的最长时间。 经过该时间后,处理器将关闭此会话并尝试处理另一个会话。

重试设置

除了使用 5.x 版及更高版本的服务总线扩展时的上述配置属性外,你还可以从 ServiceBusOptions 内部配置 RetryOptions。 这些设置确定了是否应重试失败的操作。如果应重试,则请确定两次重试之间的等待时间。 这些选项还控制允许用于接收消息以及与服务总线服务进行的其他交互的时间。

属性 默认 说明
mode 指数 用于计算重试延迟的方法。 默认指数模式将根据一个回退策略来重试带延迟的尝试,该策略规定每次尝试都会增加重试前的等待时间。 Fixed 模式将按固定间隔重试,每个延迟的持续时间一致。
tryTimeout 00:01:00 每次尝试等待操作的最大持续时间。
delay 00:00:00.80 要在两次重试之间应用的延迟或回退因子。
maxDelay 00:01:00 允许出现在两次重试之间的最大延迟
maxRetries 3 将关联的操作视为失败之前的最大重试次数。

后续步骤