"queued" Azure 事件网格 Blob 触发器事件消息存储在哪里?如何清除它们?
Where are "queued" Azure Event Grid Blob trigger event messages stored and how can I clear them?
请原谅我的术语有点不对;我是新手。
我创建了一个 Azure 事件网格订阅,它会在我将文件上传到 blob 存储时触发一个事件。我有一个响应此事件的 Azure 函数。我终于让这一切正常工作了,但是我有一堆来自以前(错误的)上传的遗留消息,这些消息定期失败(从 Azure 门户中的日志 window 中查看相关的 Azure 功能) .就好像它们存储在某处的队列中并定期重试,但我不确定它是否是这样工作的。
无论如何,我想做的是清除任何传输中或排队的事件,但我不知道在哪里可以找到它们来执行此操作。据我所知,它们只是漂浮在空中。
如何清除这些事件,使它们不会随机触发我的 Azure 函数?
如果在尝试传递时返回 200 或 202 (OK/Accepted) 以外的任何内容,事件网格将自动重试传递消息。默认情况下,它将重试 24 小时,并使用指数备份在每个请求之间增加额外的时间,直到它放弃。您看到的是默认进程 运行。 (您还可以使用存储帐户配置死信处理,以便在最终失败时将未送达的消息存储在某个地方)。
您可能正在寻找的是您可以在创建订阅时创建的重试策略。很确定您可以将最大投递尝试次数设置为 1,这样它就不会重试(如果没有启用死信支持,消息基本上会被丢弃)。有关详细信息,请访问 https://docs.microsoft.com/en-us/azure/event-grid/manage-event-delivery#set-retry-policy
我不知道有什么方法可以 "dequeue" 在没有重试策略的情况下已经提交的消息 - 您可能必须删除并重新创建对该事件网格主题的订阅。
除了@JoshCarlisle 的回答外,Event Grid message delivery and retry 文档更清楚:
死信启用重试策略逻辑中的特殊情况。
如果死信是 开启 并且订阅者因 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":"MaxDeliveryAttemptsExceeded",
"deliveryAttempts":3,
"lastDeliveryOutcome":"TimedOut",
"lastHttpStatusCode":408,
现在,您可以看到 deadLetterReason 属性 中描述的上述两种不同情况,例如“UndeliverableDueToHttpBadRequest” vs “MaxDeliveryAttemptsExceeded”
还有一件事:
- 启用死信后,事件网格不会立即向死信端点发送死信消息,但会在大约 300 秒后发送。我希望这是一个错误,很快就会修复。
实际上,如果订阅者失败,例如 HttpStatusCode.BadRequest,我们不能等待 5 分钟来自容器存储的事件,它必须是接近实时的事件驱动.
请原谅我的术语有点不对;我是新手。
我创建了一个 Azure 事件网格订阅,它会在我将文件上传到 blob 存储时触发一个事件。我有一个响应此事件的 Azure 函数。我终于让这一切正常工作了,但是我有一堆来自以前(错误的)上传的遗留消息,这些消息定期失败(从 Azure 门户中的日志 window 中查看相关的 Azure 功能) .就好像它们存储在某处的队列中并定期重试,但我不确定它是否是这样工作的。
无论如何,我想做的是清除任何传输中或排队的事件,但我不知道在哪里可以找到它们来执行此操作。据我所知,它们只是漂浮在空中。
如何清除这些事件,使它们不会随机触发我的 Azure 函数?
如果在尝试传递时返回 200 或 202 (OK/Accepted) 以外的任何内容,事件网格将自动重试传递消息。默认情况下,它将重试 24 小时,并使用指数备份在每个请求之间增加额外的时间,直到它放弃。您看到的是默认进程 运行。 (您还可以使用存储帐户配置死信处理,以便在最终失败时将未送达的消息存储在某个地方)。
您可能正在寻找的是您可以在创建订阅时创建的重试策略。很确定您可以将最大投递尝试次数设置为 1,这样它就不会重试(如果没有启用死信支持,消息基本上会被丢弃)。有关详细信息,请访问 https://docs.microsoft.com/en-us/azure/event-grid/manage-event-delivery#set-retry-policy
我不知道有什么方法可以 "dequeue" 在没有重试策略的情况下已经提交的消息 - 您可能必须删除并重新创建对该事件网格主题的订阅。
除了@JoshCarlisle 的回答外,Event Grid message delivery and retry 文档更清楚:
死信启用重试策略逻辑中的特殊情况。 如果死信是 开启 并且订阅者因 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":"MaxDeliveryAttemptsExceeded",
"deliveryAttempts":3,
"lastDeliveryOutcome":"TimedOut",
"lastHttpStatusCode":408,
现在,您可以看到 deadLetterReason 属性 中描述的上述两种不同情况,例如“UndeliverableDueToHttpBadRequest” vs “MaxDeliveryAttemptsExceeded”
还有一件事:
- 启用死信后,事件网格不会立即向死信端点发送死信消息,但会在大约 300 秒后发送。我希望这是一个错误,很快就会修复。 实际上,如果订阅者失败,例如 HttpStatusCode.BadRequest,我们不能等待 5 分钟来自容器存储的事件,它必须是接近实时的事件驱动.