消息总线 vs. 服务总线 vs. 事件中心 vs. 事件网格

jen*_*007 28 message-queue servicebus azureservicebus azure-eventhub azure-eventgrid

我正在学习消息传递系统,但对这些术语感到困惑。

下面的所有消息传递系统都提供了具有不同功能集的服务之间的松散耦合。

queue - FIFO,拉动机制,每个队列有 1 个消费者,但有任意数量的生产者?

message bus- 发布/订阅模型,任意数量的消费者和任意数量的生产者处理消息?是Azure Service Bus的实现message bus

event bus - 发布/订阅模型,任意数量的消费者和任意数量的生产者处理事件?

就术语而言,人们是否可以互换使用message busevent bus

事件和消息有什么区别?在这种情况下,这些只是同义词吗?

event hub- 发布/订阅模型,分区,重放,消费者可以将事件存储在外部存储中或接近实时数据分析。究竟什么是事件中心?

event grid- 它可以用作事件中心的下游服务。它究竟做了哪些event hub没有做的事情?

有人可以提供一些历史背景,说明每种技术如何演变为另一种技术,每种技术都与一些实际用例相关联吗?

我发现消息总线与消息队列有帮助

Ith*_*har 41

即使所有这些服务都处理从源到目标的数据传输,并且可能看起来很相似,属于它们在意图上有所不同的伞形消息传递服务。

高级定义:

  • Azure 事件网格——事件驱动的发布订阅模型(想想反应式编程)
  • Azure 事件中心——多源大数据流管道(想想遥测数据)
  • Azure 服务总线- 传统的企业代理消息系统(取代 Azure 队列存储)

事件网格事件中心之间的区别

  1. 事件网格不保证事件的顺序,但事件中心使用有序序列的分区,因此它可以维护同一分区中事件的顺序。
  2. 事件中心仅接受用于摄取数据的端点,并且不提供将数据发送回发布者的机制。另一方面,事件网格发送 HTTP 请求来通知发布者中发生的事件。
  3. 事件网格可以触发 Azure 函数。对于事件中心,Azure 函数需要拉取和处理事件。
  4. 事件网格是一种分发系统,而不是一种排队机制。如果一个事件被推入,它会立即被推出,如果它没有得到处理,它就永远消失了。除非我们将未传递的事件发送到存储帐户。这个过程被称为死信。
  5. 事件中心,数据最多可以保留 7 天,然后重播。这使我们能够从某个点恢复或从较旧的时间点重新启动并在需要时重新处理事件。

事件中心服务总线之间的区别

对于外部发布者或接收者来说,服务总线事件中心看起来非常相似,这就是很难理解两者之间的区别以及何时使用什么的原因。

  1. 事件中心专注于事件流,其中服务总线更像是一个传统的消息传递代理。
  2. 服务总线用作将在云中运行的应用程序连接到其他应用程序或服务并在它们之间传输数据的主干,而事件中心则更关心接收具有高吞吐量和低延迟的海量数据。
  3. 事件中心将多个事件生成器与事件接收器分离,而服务总线旨在分离应用程序。
  4. 服务总线消息传递支持消息属性“生存时间”,而事件中心的默认保留期为 7 天。
  5. 服务总线具有消息会话的概念。它允许根据会话 ID 属性关联消息,而事件中心则不允许。
  6. 服务总线消息被接收器拉出并且无法再次处理,而事件中心消息可以被多个接收器摄取。
  7. 服务总线使用队列和主题的术语,而使用事件中心分区术语。

使用这个宽松的一般经验法则。

出事了——甚至是集线器

做点什么或给我点东西——服务总线

正如@Louie Almeda 所说,您可能会发现此官方 Azure 文档的链接很有用。

  • 这是对 EH 和 SB 之间差异的第一个解释,它实际上使我清楚了_用法_区别,而不是仅仅列出功能差异。谢谢。 (3认同)
  • 看来Azure Functions现在支持事件中心作为触发器:https://learn.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings?tabs=csharp#supported-bindings (3认同)
  • 您的一般规则评论应该位于 Microsoft 每个页面的最顶部,这是对每个问题的快速回答:) (2认同)
  • @OmarMuscatello 对主题的订阅类似于一个虚拟队列,用于接收发送到该主题的消息的副本。如果您希望将每条消息传递到多个目标组件,请使用主题;但是一旦消息从队列中提取出来,它就无法再次被摄取。 (2认同)

Lou*_*eda 13

我发现Azure 文档中的这种比较非常有帮助。这是事件和消息之间的主要区别。

事件与消息服务

需要注意传递事件的服务和传递消息的服务之间的重要区别。

事件

事件是条件或状态更改的轻量级通知。事件的发布者对事件的处理方式没有期望。事件的消费者决定如何处理通知。事件可以是离散单元或系列的一部分。

离散事件报告状态变化并且是可操作的。要进行下一步,消费者只需要知道发生了一些事情。事件数据有关于发生了什么的信息,但没有触发事件的数据。例如,事件通知消费者文件已创建。它可能有关于文件的一般信息,但它没有文件本身。离散事件非常适合需要扩展的无服务器解决方案。

系列事件报告一个条件并且是可分析的。事件按时间顺序排列且相互关联。消费者需要按顺序排列的一系列事件来分析发生了什么。

信息

消息是服务产生的原始数据,用于消费或存储在其他地方。消息包含触发消息管道的数据。消息的发布者对消费者如何处理消息有预期。双方之间存在合同。例如,发布者发送带有原始数据的消息,并期望消费者根据该数据创建一个文件,并在工作完成后发送响应。

还讨论了这些不同服务的比较,所以一定要检查一下。


小智 5

我同意您关于术语过多的评论,尤其是云服务营销术语......

从历史上看,事件和消息具有更不同的含义——事件是指同一进程内的通信,而消息是指跨不同进程的通信。