Service Bus队列同消息触发Logic App两次(状态为Scheduled、Active)问题咨询
问题触发场景
- 带
ScheduledEnqueueTimeUTC属性的消息投递到Service Bus队列后,会先进入Scheduled状态,直到到达指定的UTC时间才会自动切换为Active状态,默认仅Active状态的消息可被正常消费。 - 当前Logic App的Service Bus触发器未配置消息状态过滤规则,支持拉取队列中所有状态的消息:当触发器运行时间早于消息的
ScheduledEnqueueTimeUTC设定时间时,会先拉取到Scheduled状态的该消息,且此时拉取操作不会触发消息锁定、也不会将消息从队列中移除,消息仍会保留在队列中等待状态切换。 - 待消息到达指定时间切换为
Active状态后,下一次触发器运行时会再次拉取到该消息,就会出现两条sequenceNumber完全相同、状态不同的重复消息记录。
解决方案
- 修改Service Bus触发器的拉取配置,添加状态过滤规则,仅拉取Active状态的消息,直接跳过未到执行时间的计划消息,从根源避免提前拉取的问题。
- 调整
ScheduledEnqueueTimeUTC的设置值,确保消息的计划入队时间至少比Logic App的每日触发时间(EST凌晨00:05)提前15分钟以上,预留Service Bus的状态同步时间窗口,避免触发器运行时消息还未完成状态切换。 - 若业务场景不需要消息延迟入队,投递消息时直接移除
ScheduledEnqueueTimeUTC属性,消息投递后直接进入Active状态,不会出现状态切换过程中的重复拉取问题。 - 开启Service Bus队列的重复检测功能,设置覆盖两次触发器间隔的重复检测时间窗口,相同sequenceNumber的消息只会被消费一次,避免重复执行业务逻辑。
内容的提问来源于stack exchange,提问作者Techstack
相关产品推荐
相关产品推荐

