我有一个 Azure 服务总线命名空间,包含 8 个主题,每个主题至少有一个订阅。
通常有两个逻辑应用,第一个每半小时(在 15 点和 45 点)从我们的数据库中提取数据并将其放置到选择的服务总线主题上,第二个使用“收到消息时触发”在主题订阅中(自动完成)”触发连接器 - 具有默认并发设置 (25)。一个例子如下所示
"When_a_message_is_received_in_a_topic_subscription_(auto-complete)": {
"conditions": [],
"inputs": {
"host": {
"connection": {
"name": "@parameters('$connections')['servicebus']['connectionId']"
}
},
"method": "get",
"path": "/@{encodeURIComponent(encodeURIComponent('exampletopic'))}/subscriptions/@{encodeURIComponent('examplesubscription')}/messages/head",
"queries": {
"subscriptionType": "Main"
}
},
"recurrence": {
"frequency": "Minute",
"interval": 30,
"startTime": "2021-01-27T00:00:00.000Z",
"timeZone": "UTC"
},
"runtimeConfiguration": {
"concurrency": {
"runs": 25
}
},
"type": "ApiConnection"
}
如标题中所述,我遇到的问题是触发器仅在 30 分钟轮询重复时触发,如下所示,而不是在消息进入服务总线时触发(与我们也使用的常见数据服务触发器不同在创建/更新/删除时立即触发)。这是设计使然还是我设置错误?
另一个问题是并发设置实际上只允许 25 个通过,并将其余部分保留在服务总线中直到下一次运行,因此我们不得不在处理之间等待很长时间。我认为并发设置的重点是让逻辑应用程序运行在队列中等待,然后当一个完成时另一个可以启动。正如您在我上面粘贴的图片中看到的那样,这并没有发生。3.45 运行从数据库中提取了 43 条记录。只有 25 个在 4.00 触发,还有 17 个留在服务总线上,直到下一次在 4.30 运行。如果我们发送大量数据,这有可能成为一个巨大的瓶颈。
服务总线设置也在下面,如果任何人都感兴趣的话:
Topic:
"properties": {
"defaultMessageTimeToLive": "P5D",
"maxSizeInMegabytes": 1024,
"requiresDuplicateDetection": true,
"duplicateDetectionHistoryTimeWindow": "PT1H",
"enableBatchedOperations": true,
"status": "Active",
"supportOrdering": true,
"autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
"enablePartitioning": false,
"enableExpress": false
}
Subscription:
"properties": {
"lockDuration": "PT5M",
"requiresSession": false,
"defaultMessageTimeToLive": "P5D",
"deadLetteringOnMessageExpiration": true,
"deadLetteringOnFilterEvaluationExceptions": true,
"maxDeliveryCount": 1,
"status": "Active",
"enableBatchedOperations": true,
"autoDeleteOnIdle": "P5D"
}
提前致谢