逻辑应用程序:具有并发控制的ServiceBus触发器导致窥视锁定超时

时间:2018-08-01 12:54:20

标签: azureservicebus servicebus azure-logic-apps azure-servicebus-queues

几天以来,当在Logic Apps中结合使用ServiceBus触发器和“并发控制”功能时,我看到了一些“新”行为。 我有一个轮询触发器,每5分钟检查一次队列。并将并发控制配置为最多5个实例,以不使后端数据库超载。

过去,当我将40条消息放入队列时,它将旋转5个实例..当轮询间隔过去时,仍有3个实例在运行...触发器随后又增加了2个实例以使总数增加运行实例回到我配置的阈值5。我是一个满意的客户:)

现在,我看到触发器立即创建了40个实例。其中5个正在运行,其他35个处于“等待”状态。实例完成处理后,一个正在等待的实例开始工作。听起来不错,您不觉得吗?并非在所有情况下都如此。

enter image description here

使用Peek锁定机制时,启动“等待”实例时,超时开始计数。如果必须等待5分钟以上(最大锁定超时),则锁定已过期。这将导致消息在队列上再次变得可用,从而导致为同一消息启动新的“等待”实例。 因此,最后,我进行了很多不必要的重复处理,甚至邮件由于达到了maxDeliveryCount限制而被废止。

似乎无法在轮询行为中找到有关此更改的任何信息? 除了使用自动完成功能以外,还有解决偷看锁定问题的人吗?

更新07/08/2018:

MSFT Logic应用产品小组证实,这是为SplitOn触发器启用并发控制的新实现。在逻辑应用程序上启用SplitOn后,您将获得此行为。即使再次禁用SplitOn,行为仍然保持这种方式。要“重置”您的Logic App,您将必须完全删除资源并重新部署。

2 个答案:

答案 0 :(得分:1)

MSFT Logic应用产品小组证实,这是为SplitOn触发器启用并发控制的新实现。在逻辑应用程序上启用SplitOn后,您将获得此新行为。即使再次禁用SplitOn,行为仍然保持这种方式。 要“重置”您的Logic App,您必须完全删除资源并重新部署。

如果“等待运行”实现适合您的情况,但是您仍然希望控制每次触发运行启动/等待的实例数,那么有一个设置可用于控制最大“等待运行”。。不幸的是,UI中尚未启用此功能,因此您需要转到代码视图。 目前,maximumWaitingRuns不能设置为低于1。

maximumWaitingRuns

答案 1 :(得分:0)

听起来像是一个真正的问题。由于锁定持续时间的最大值为5分钟,因此您只能使用“自动完成”功能。

我的建议是让主题具有两个订阅或重复队列。

主题订阅-消息将同时发送到两个订阅,您可以在其中将一个订阅用于Logic应用程序自动完成,而另一个订阅可用于跟踪消息。由于两个订阅将具有相同的消息,因此不会有重复或丢失的消息。

重复队列-您可以使Logic应用自动完成邮件,并将其转发到第二个队列中,您可以在其中跟踪邮件。