The documentation you are viewing is for Dapr v1.15 which is an older version of Dapr. For up-to-date documentation, see the latest version.
Azure Service Bus Queues 绑定规范
组件格式
要设置 Azure Service Bus Queues 绑定,请创建一个类型为 bindings.azure.servicebusqueues 的组件。请参阅本指南了解如何创建和应用绑定配置。
连接字符串认证
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
spec:
type: bindings.azure.servicebusqueues
version: v1
metadata:
- name: connectionString # 不使用 Azure 认证时必需。
value: "Endpoint=sb://{ServiceBusNamespace}.servicebus.windows.net/;SharedAccessKeyName={PolicyName};SharedAccessKey={Key};EntityPath={ServiceBus}"
- name: queueName
value: "queue1"
# - name: timeoutInSec # 可选
# value: "60"
# - name: handlerTimeoutInSec # 可选
# value: "60"
# - name: disableEntityManagement # 可选
# value: "false"
# - name: maxDeliveryCount # 可选
# value: "3"
# - name: lockDurationInSec # 可选
# value: "60"
# - name: lockRenewalInSec # 可选
# value: "20"
# - name: maxActiveMessages # 可选
# value: "10000"
# - name: maxConcurrentHandlers # 可选
# value: "10"
# - name: defaultMessageTimeToLiveInSec # 可选
# value: "10"
# - name: autoDeleteOnIdleInSec # 可选
# value: "3600"
# - name: minConnectionRecoveryInSec # 可选
# value: "2"
# - name: maxConnectionRecoveryInSec # 可选
# value: "300"
# - name: maxRetriableErrorsPerSec # 可选
# value: "10"
# - name: publishMaxRetries # 可选
# value: "5"
# - name: publishInitialRetryIntervalInMs # 可选
# value: "500"
# - name: direction
# value: "input, output"
警告
上述示例中使用了明文字符串作为密钥。建议使用密钥存储来存储这些敏感信息,如此处所述。规范元数据字段
| 字段 | 必需 | 绑定支持 | 详情 | 示例 |
|---|---|---|---|---|
connectionString |
Y | 输入/输出 | Service Bus 的连接字符串。除非使用 Microsoft Entra ID 认证,否则必需。 | "Endpoint=sb://************" |
queueName |
Y | 输入/输出 | Service Bus 的队列名称。队列名称不区分大小写,并将始终强制为小写。 | "queuename" |
timeoutInSec |
N | 输入/输出 | 对 Azure Service Bus 端点的所有调用的超时时间,以秒为单位。注意,此选项影响网络调用,与应用于消息的 TTL 无关。默认值为 "60" |
"60" |
namespaceName |
N | 输入/输出 | 设置 Service Bus 命名空间地址的参数,作为完全限定的域名。使用 Microsoft Entra ID 认证时必需。 | "namespace.servicebus.windows.net" |
disableEntityManagement |
N | 输入/输出 | 当设置为 true 时,队列和订阅不会自动创建。默认值为 "false" |
"true", "false" |
lockDurationInSec |
N | 输入/输出 | 定义消息在过期前被锁定的时间长度,以秒为单位。仅在订阅创建期间使用。由服务器设置默认值。 | "30" |
autoDeleteOnIdleInSec |
N | 输入/输出 | 在自动删除空闲订阅之前等待的时间,以秒为单位。仅在订阅创建期间使用。必须为 300 秒或更长。默认值为 "0" (禁用) |
"3600" |
defaultMessageTimeToLiveInSec |
N | 输入/输出 | 默认消息生存时间,以秒为单位。仅在订阅创建期间使用。 | "10" |
maxDeliveryCount |
N | 输入/输出 | 定义服务器尝试传递消息的次数。仅在订阅创建期间使用。由服务器设置默认值。 | "10" |
minConnectionRecoveryInSec |
N | 输入/输出 | 在连接失败的情况下,尝试重新连接到 Azure Service Bus 之前等待的最小间隔(以秒为单位)。默认值为 "2" |
"5" |
maxConnectionRecoveryInSec |
N | 输入/输出 | 在连接失败的情况下,尝试重新连接到 Azure Service Bus 之前等待的最大间隔(以秒为单位)。每次尝试后,组件在最小和最大之间等待一个随机秒数,每次增加。默认值为 "300" (5 分钟) |
"600" |
maxActiveMessages |
N | 定义一次处理或在缓冲区中的最大消息数。此值应至少与最大并发处理程序一样大。默认值为 "1" |
"1" |
|
handlerTimeoutInSec |
N | 输入 | 调用应用程序处理程序的超时时间。默认值为 "0" (无超时) |
"30" |
minConnectionRecoveryInSec |
N | 输入 | 在连接失败的情况下,尝试重新连接到 Azure Service Bus 之前等待的最小间隔(以秒为单位)。默认值为 "2" |
"5" |
maxConnectionRecoveryInSec |
N | 输入 | 在连接失败的情况下,尝试重新连接到 Azure Service Bus 之前等待的最大间隔(以秒为单位)。每次尝试后,绑定在最小和最大之间等待一个随机秒数,每次增加。默认值为 "300" (5 分钟) |
"600" |
lockRenewalInSec |
N | 输入 | 定义缓冲消息锁将被续订的频率。默认值为 "20"。 |
"20" |
maxActiveMessages |
N | 输入 | 定义一次处理或在缓冲区中的最大消息数。此值应至少与最大并发处理程序一样大。默认值为 "1" |
"2000" |
maxConcurrentHandlers |
N | 输入 | 定义最大并发消息处理程序数;设置为 0 表示无限制。默认值为 "1" |
"10" |
maxRetriableErrorsPerSec |
N | 输入 | 每秒处理的最大可重试错误数。如果消息因可重试错误而无法处理,组件会在开始处理另一条消息之前添加延迟,以避免立即重新处理失败的消息。默认值为 "10" |
"10" |
publishMaxRetries |
N | 输出 | 当 Azure Service Bus 响应“过于繁忙”以限制消息时的最大重试次数。默认值为 "5" |
"5" |
publishInitialRetryIntervalInMs |
N | 输出 | 当 Azure Service Bus 限制消息时,初始指数退避的时间(以毫秒为单位)。默认值为 "500" |
"500" |
direction |
N | 输入/输出 | 绑定的方向 | "input", "output", "input, output" |
Microsoft Entra ID 认证
Azure Service Bus Queues 绑定组件支持使用所有 Microsoft Entra ID 机制进行认证,包括托管身份。有关更多信息以及根据选择的 Microsoft Entra ID 认证机制提供的相关组件元数据字段,请参阅认证到 Azure 的文档。
示例配置
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
spec:
type: bindings.azure.servicebusqueues
version: v1
metadata:
- name: azureTenantId
value: "***"
- name: azureClientId
value: "***"
- name: azureClientSecret
value: "***"
- name: namespaceName
# 使用 Azure 认证时必需。
# 必须是完全限定的域名
value: "servicebusnamespace.servicebus.windows.net"
- name: queueName
value: queue1
- name: ttlInSeconds
value: 60
绑定支持
此组件支持 输入和输出 绑定功能。
此组件支持具有以下操作的 输出绑定:
create: 将消息发布到指定队列
消息元数据
Azure Service Bus 消息通过附加上下文元数据扩展了 Dapr 消息格式。一些元数据字段由 Azure Service Bus 本身设置(只读),其他字段可以在通过 Invoke 绑定调用使用 create 操作发布消息时由客户端设置。
发送带有元数据的消息
要在发送消息时设置 Azure Service Bus 元数据,请在 HTTP 请求或 gRPC 元数据上设置查询参数,如此处所述。
metadata.MessageIdmetadata.CorrelationIdmetadata.SessionIdmetadata.Labelmetadata.ReplyTometadata.PartitionKeymetadata.Tometadata.ContentTypemetadata.ScheduledEnqueueTimeUtcmetadata.ReplyToSessionId
注意
接收带有元数据的消息
当 Dapr 调用您的应用程序时,它使用 HTTP 头或 gRPC 元数据将 Azure Service Bus 消息元数据附加到请求中。 除了上述可设置的元数据外,您还可以访问以下只读消息元数据。
metadata.DeliveryCountmetadata.LockedUntilUtcmetadata.LockTokenmetadata.EnqueuedTimeUtcmetadata.SequenceNumber
要了解这些元数据属性的目的的更多详细信息,请参阅官方 Azure Service Bus 文档。
此外,原始 Azure Service Bus 消息的所有 ApplicationProperties 条目都作为 metadata.<application property's name> 附加。
注意
所有时间均由服务器设置,并未调整时钟偏差。为每条消息指定 TTL
生存时间可以在队列级别(如上所示)或消息级别进行定义。在消息级别定义的值将覆盖在队列级别设置的任何值。
要在消息级别设置生存时间,请在绑定调用期间使用请求体中的 metadata 部分:字段名称为 ttlInSeconds。
curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \
-H "Content-Type: application/json" \
-d '{
"data": {
"message": "Hi"
},
"metadata": {
"ttlInSeconds": "60"
},
"operation": "create"
}'
调度消息
可以调度消息以进行延迟处理。
要调度消息,请在绑定调用期间使用请求体中的 metadata 部分:字段名称为 ScheduledEnqueueTimeUtc。
curl -X POST http://localhost:3500/v1.0/bindings/myServiceBusQueue \
-H "Content-Type: application/json" \
-d '{
"data": {
"message": "Hi"
},
"metadata": {
"ScheduledEnqueueTimeUtc": "Tue, 02 Jan 2024 15:04:05 GMT"
},
"operation": "create"
}'
相关链接
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.