当有多个订阅者时,Azure事件网格如何处理失败?

时间:2019-01-22 20:54:26

标签: azure-eventgrid

Event Grid的文档指出它内置了delivery and retry mechanism,并给出了将其归类为成功或失败尝试的示例。该文档非常清楚单个事件处理程序会发生什么。

我的问题是,如果有多个事件处理程序,并且只有一个处理程序无法接收事件,将会发生什么?是仅针对该处理程序重试该事件,还是所有处理程序都将看到重试?

3 个答案:

答案 0 :(得分:3)

基本上,Azure事件网格事件发布/订阅模型可以处理两种消息传递/中介模式,例如 Fan-In 模式和 Fan-Out (广播)模式。以下屏幕片段显示了它们的区别:

enter image description here

enter image description here

订阅描述了事件源和事件接收器之间的逻辑连接,它基本上是发布/订阅模型的元数据工件。每个逻辑连接(由预订表示)都是独立的,并且彼此松散地分离。换句话说,每个订户在此发布/订阅模型中只能处理一个逻辑连接,例如仅一个事件源。

您的问题与“扇出”(广播)模式有关,在该模式中,事件关注点正在使用PushWithAck传递模式向多个订户广播。此扇出模式内的每个订阅都有由订阅者声明的自己的“消息状态传递机器”,例如重试选项,死信,过滤等。

换句话说,到订阅者的事件传递是基于订阅的透明方式并行处理的,彼此之间没有任何依赖性。请注意,订户没有任何有关向谁,何时何地,如何向其他人传递事件的信息,因此每个订户只能看到自己的传递状态,例如 Aeg-Delivery的值-Count 显示状态机的重试计数器。

因此,在将失败的事件传递给多个订户之一的情况下,启用的重试过程仅针对该订户执行。

答案 1 :(得分:2)

正如罗曼所解释的那样,每个端点都是独立处理的。如果一个事件处理程序失败,将在不影响其他事件处理程序的情况下重试它,当然,如果该特定端点继续失败,则最终将被取消标记(假定已在事件订阅上配置了失效标记),或将其删除。 / p>

答案 2 :(得分:0)

在事件网格中进行事件发布时,来自自定义事件网格主题或系统事件网格主题(例如,服务总线命名空间)的事件将转发到为其配置的事件网格订阅。然后将事件发送到配置了事件网格订阅的端点。

每当事件传递到端点失败时,都会根据配置的重试策略重试。如果重试次数超过配置的重试策略,则将事件配置为死信目的地时,事件将存储在存储帐户blob中,否则事件将丢失。

  

默认情况下,“事件网格”会使所有未在24小时内交付的事件失效。您可以在创建事件订阅时自定义重试策略。您提供了最大的传递尝试次数(默认为30)和事件生存时间(默认为1440分钟)。

当同一事件网格主题有多个订阅者(事件网格订阅)时,仅对事件传递失败的事件网格订阅进行重试。

请参考Event Grid message delivery and retry,以获取有关重试策略的更多信息。