“你在哪里?”;排队;Azure事件网格Blob触发存储的事件消息,如何清除它们?

“你在哪里?”;排队;Azure事件网格Blob触发存储的事件消息,如何清除它们?,azure,azure-functions,azure-storage-blobs,azure-eventgrid,Azure,Azure Functions,Azure Storage Blobs,Azure Eventgrid,如果我的术语有点不恰当,请原谅;我是新来的 我创建了一个Azure事件网格订阅,每当我将文件上载到blob存储时,它都会触发一个事件。我有一个Azure函数响应此事件。我终于让这一切都正常工作了,但是我有一大堆以前(坏的)上传的遗留消息,这些消息会定期失败(从Azure门户中相关Azure功能的“日志”窗口中查看)。这就好像它们被存储在某个队列中的某个位置,并定期重试,尽管我不确定它是否是这样工作的 在任何情况下,我想要做的是清除任何传输中或队列中的事件,但我不知道在哪里可以找到它们来执行此操作

如果我的术语有点不恰当,请原谅;我是新来的

我创建了一个Azure事件网格订阅,每当我将文件上载到blob存储时,它都会触发一个事件。我有一个Azure函数响应此事件。我终于让这一切都正常工作了,但是我有一大堆以前(坏的)上传的遗留消息,这些消息会定期失败(从Azure门户中相关Azure功能的“日志”窗口中查看)。这就好像它们被存储在某个队列中的某个位置,并定期重试,尽管我不确定它是否是这样工作的

在任何情况下,我想要做的是清除任何传输中或队列中的事件,但我不知道在哪里可以找到它们来执行此操作。据我所知,它们只是在乙醚中漂浮


我如何才能清除这些事件,使它们不会一直在随机触发我的Azure功能?

如果在尝试传递时返回200或202(确定/接受)以外的任何内容,则事件网格将自动重试传递消息。默认情况下,它将在24小时内重试,并使用指数备份,在每次请求之间增加额外的时间,直到它放弃。您看到的是默认进程正在运行。(您还可以使用存储帐户配置死信处理,以便在最终失败时将未送达的邮件存储在某个位置)

您可能在寻找创建订阅时可以创建的重试策略。非常确定您可以将最大传递尝试次数设置为1,这样它就不会重试(如果没有死信支持,则消息基本上会被丢弃)。有关这方面的更多详细信息,请访问


在没有重试策略的情况下,我不知道有什么方法可以“退出”已提交的邮件-您可能必须删除并重新创建对该事件网格主题的订阅。

除了@JoshCarlisle的答案,文档中还有更清楚的内容:

死信启用重试策略逻辑中的特殊情况。 如果死信是打开的,并且订户失败,出现HttpStatusCode.BadRequest,则事件网格将停止重试过程,并将事件发送到死信端点。此错误代码表示传递永远不会成功

以下代码段显示死信消息中的一些属性:

"deadLetterReason": "UndeliverableDueToHttpBadRequest",
"deliveryAttempts": 1,
"lastDeliveryOutcome": "BadRequest",
"lastHttpStatusCode": 400,
以下列表显示了事件网格将在重试过程中继续的一些状态代码:

HttpStatusCode.ServiceUnavailable
HttpStatusCode.InternalServerError
HttpStatusCode.RequestTimeout
HttpStatusCode.NotFound
HttpStatusCode.Conflict
HttpStatusCode.Forbidden
HttpStatusCode.Unauthorized
HttpStatusCode.NotImplemented
HttpStatusCode.Gone
HttpStatusCode.RequestTimeout时的一些死信属性示例:

现在,您可以看到deadLetterReason属性中描述的上述两种不同情况,例如“由于HttpBadRequest而无法交付”与“MaxDeliveryAttemptsExceed

还有一件事:

  • 启用死信时,事件网格将立即向死信端点发送死信消息,但在约300秒后。我希望这是一个错误,它将很快被修复。 实际上,如果订阅服务器失败,例如HttpStatusCode.BadRequest,我们不能等待容器存储中的事件5分钟,它必须是一个接近实时的事件驱动
非常感谢,这确实澄清了一些问题。尽管目前似乎存在一个错误,任何更改超时的尝试都会完全破坏我的事件网格订阅、删除其筛选器等,使其重新工作的唯一方法是从门户的Azure功能区域重新创建它。删除并重新创建订阅并不能解决我的问题。以前的失败事件显然仍在重试队列中,事件网格试图运行它们。死信消息的5分钟缓冲区是设计出来的。@dbarkol延迟5分钟的原因是什么?我的测试表明,这不是用于批处理的过程,为什么不能仅仅60秒?我们可以配置它吗?它有助于减少blob操作的数量。没有办法对其进行配置。@dbarkol MSDN文档中缺少此部分,因此我刚刚创建了一个问题,谢谢
"deadLetterReason":"MaxDeliveryAttemptsExceeded",
"deliveryAttempts":3,
"lastDeliveryOutcome":"TimedOut",
"lastHttpStatusCode":408,