首页 > 解决方案 > 使用逻辑应用程序清理 ServiceBus Deadletter 队列

问题描述

我们希望使用 Azure 逻辑应用定期清理 ServiceBus DeadLetter Queue。这个想法是每天循环一次所有 DeadLetter 消息并删除超过 x 天的消息。

我使用“从队列中获取消息(窥视锁)”实现了定期“重复”任务。当他们满足我的条件时,他们就完成了,因此从队列中删除。这适用于数百条消息。但是当我用数千条消息对此进行测试时,它开始返回在当前运行期间已经访问过的消息。如果再次处理相同的 messageId,我包含了一个终止处理的条件。

有没有办法实现我们想要的?因此,要遍历所有消息,删除一些消息并保留其他消息而不重复访问它们中的任何一个?

这是流程的简化方案。

在此处输入图像描述

标签: azureazureservicebusazure-logic-apps

解决方案


我认为问题在于您的 For Each 需要并发控制。Get Messages 操作将从队列中返回 X 条消息(默认为 20 条),然后 For Each 操作并行运行,并且这些操作(在 For Each 内部)在退出该循环并开始之前不会等待所有操作完成再次使用“直到”。我会测试更改 For Each 设置/并发控制(右侧省略号)并将并行度降低到一个较低的数字。


推荐阅读