首页 > 解决方案 > 了解 Azure 消息队列中的毒药消息处理并在逻辑应用中使用它

问题描述

我正在尝试使用连接了多个 Azure Functions 的 Azure Logic Apps 创建工作流。我正在使用 blob 触发器并将其内容发送到第一个函数,然后,该函数将 http req 发送到下一个函数,依此类推。但是我想确保第一个函数正确处理它。所以我想我可以使用消息队列,因为它支持毒药消息处理。

现在,blob 触发器将一条新消息放入队列中,然后由第一个函数处理。我看过很多关于如何设置重试策略的文章(一条消息应该被处理多少次,以及重试之间的间隔),但是我找不到关于如何使用毒药消息处理的信息。所以我的问题是:

超过重试次数后那些毒消息如何处理,

他们只是留在那个队列中,但被标记为毒药吗?

他们是否放在其他队列中,只包含有毒的?

我如何利用甚至找到它们?是否只能手动管理它们,或者我可以设置某种在有毒消息发生时触发的触发器?

我也想知道我的方法是否正确。可以在逻辑应用中直接将 Azure Functions 相互连接起来,还是每个都有自己的消息队列?我什至需要消息队列来处理中毒消息还是有直接在逻辑应用程序中执行此操作的好方法(我知道可以设置重试设置,但我没有看到任何关于自动中毒消息处理的信息)

标签: .netazuremessage-queueazure-functionsazure-logic-apps

解决方案


中毒消息在Trigger- toxic messages 中进行了解释:

如果所有五次尝试都失败,函数运行时会将消息添加到名为<originalqueuename>-poison. 您可以编写一个函数来处理来自毒物队列的消息,方法是记录它们或发送需要手动注意的通知。

要添加,则从原始队列中删除消息。

因此,毒物队列只是另一个队列,您可以根据需要处理该队列中的消息(例如,使用另一个 Azure 函数)。

您的确切方法是否有效取决于您的要求细节,我认为这超出了这个问题的范围。这可能是一种可行的方法。


推荐阅读