gpt4 book ai didi

azure - 使用队列触发器取消 Azure Functions,而不使用有害队列

转载 作者:行者123 更新时间:2023-12-02 20:47:00 24 4
gpt4 key购买 nike

我们使用以下设置:

我们使用带有队列触发器的 Azure 函数来处理 JSON 消息队列。

这些消息均通过 HTTP POST 转发到 API 端点,以进行进一步处理。

API可以返回3种可能的HTTP状态代码; 200(正常)、400(错误请求)、500(内部服务器错误)。

如果 API 返回 200,则消息已正确处理,一切正常。队列触发功能似乎会自动删除队列消息,这对我们来说没问题。

如果 API 返回 400,则 API 具有获取消息并将其添加到表中的逻辑,该表的状态表明消息格式错误或无法处理。因此,我们同意消息自动从队列中删除,并且 Azure Function 可以正常结束。

如果 API 返回 500,我们确保函数重试将消息发布到 API,直到状态代码为 200 或 400(因为 API 可能存在问题,我们不希望丢失消息)。我们正在使用 Polly为了达成这个。我们对其进行了设置,因此它本质上会以指数退避方式永远重试。

但是我们最近遇到了这个问题:

在某些情况下,API 会针对某些消息返回 500。此错误完全是暂时的,并且会不可预测地出现和消失。使用 Polly 永远重试会很好,除非并非所有消息都会导致此错误,并且本质上“坏”消息会阻止“好”消息的处理。

假设队列中有 50 条消息。队列前面的前 32 条消息是“坏”消息,有时会从 API 返回 500。这些消息由 Azure Function 获取并同时处理。其他 18 条消息是“好”消息,将返回 200。在成功处理“坏”消息之前,不会处理这些“好”消息。本质上,坏的会导致好的交通堵塞。

我的解决方案是,如果当前消息已重试一定次数,则尝试取消 Azure Functions 的执行。我想也许该消息会在一段时间后变得可见,但在那段时间里,它给了好的消息时间来处理。但是,我不知道如何取消该函数的执行,而不导致队列消息被完全删除或推送到有害队列。

我可以使用队列触发功能来实现此目的吗?我可以使用计时器触发器来代替吗?

非常感谢!

最佳答案

正如您所提到的,您无法有效地取消执行,因此我建议完成该函数并将消息移动到队列中,稍后将在其中进行处理。

一些建议:


编辑:Here's a cheatsheet of parameter binding types

enter image description here

关于azure - 使用队列触发器取消 Azure Functions,而不使用有害队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com