什么时候用EventGrid,什么时候用ServiceBus/Storage Queue?

When to use EventGrid and when to use ServiceBus / Storage Queue?

在 Azure 中,我们有两种独立的消息传递技术,但没有很好地记录何时使用什么?虽然 EventGrid 真的很酷,但我没有遇到何时使用 EventGrid(scenarios) 与 Storage/ServiceBus 队列?有人可以帮忙吗?

例如如果我遇到以下情况:

标志的状态发生变化,基于此,我想触发一个算法来重新计算,数据库中很少 inserts/updates 等。

为了实现这个 - 我可以使用 EventGrid 或 Storage Queue。我们如何确定在这种情况下使用什么?我正在寻找某种指导。

基本上,Azure 事件网格处理事件,而 Azure ServiceBus 处理 messages.A 消息是服务生成的原始数据,供使用或存储。事件也是消息(轻量级),但除了通知之外,它们通常不传达发布者的意图。

1) 如果只是为了存储信息可以使用ServiceBus

2) 如果收到的信息用于触发另一个服务,则可以使用 Azure 事件网格。

在此处查找更多信息

https://docs.microsoft.com/en-us/azure/event-grid/compare-messaging-services https://azure.microsoft.com/en-us/blog/events-data-points-and-messages-choosing-the-right-azure-messaging-service-for-your-data/

事件就像来自服务的通知,通知世界发布者域中发生了某事(类似于电子邮件通知)。发布者不期望采取任何行动。消息是您发送给特定接收者的命令,期望消息被处理(如异步 post 请求)。

事件将以 pub/sub 模式运行,并且可以为事件配置多个订阅者。当事件发生时(从事件网格到接收者的 http 调用),需要对事件做出反应的服务将收到事件网格的通知。该事件将保留在事件网格中,直到删除(清理)并且不保证保持原始顺序(无 FIFO)。

另一方面,消息将被添加到队列中,并在“消息处理器”完成处理后被删除。队列中的消息将保持原来的顺序(先进先出)。消息处理器必须从队列中提取消息。

在您的方案中,您可以结合使用两者。服务 A 发送事​​件“StatusChanged”,然后您可以配置对该事件的订阅并将消息发送到队列,然后让您的逻辑处理该消息。这将以完全异步的通信模式结束。这非常适合支持处理器停机或太忙的情况。传入的消息将简单地累积在队列中,并最终在服务备份和 运行 后得到处理。并且不影响发送“StatusChanged”事件的原始服务..