项目

事件总线

事件总线是一种中介,它将消息从发送方传递到接收方。通过这种方式,它在对象、服务和应用程序之间提供了一种松耦合的通信方式。

事件总线类型

ABP 提供了两种类型的事件总线:

事件总线指导原则

您可能会困惑在应用程序中使用哪种事件总线。以下是一些示例场景:

  • 如果您正在构建微服务系统,请使用分布式事件总线进行微服务间通信。如果您发布事件并始终在同一微服务中处理它,则可以使用本地事件总线来处理该事件。
  • 如果您正在构建模块化单体应用程序,请使用分布式事件总线进行模块间通信。由于分布式事件总线默认在进程内工作(除非您配置了真正的分布式事件总线提供程序)。这样,如果您稍后迁移到微服务系统,这些模块间通信可以在不更改任何代码的情况下(只需安装分布式事件总线提供程序包)变为微服务间通信。如果您发布事件并始终在同一模块中处理它,则可以使用本地事件总线来处理该事件。
  • 如果您正在构建单体(非模块化)应用程序,可以始终使用本地事件总线。

分布式事件总线默认在进程内工作。除非您配置了真正的分布式事件总线提供程序,否则它的工作方式与本地事件总线相同。一旦您配置了真正的分布式事件总线提供程序,所有事件都会变为分布式事件。

因此,只有当事件在任何情况下都应保持在进程内时,才使用本地事件总线。对于其他类型的事件,请使用分布式事件总线。

技术差异

本地事件总线和分布式事件总线之间存在一些技术差异:

  • 您可以使用本地事件总线发送实体或其他不可序列化的对象,因为这些对象在事件发布时不会被序列化/反序列化。另一方面,一旦使用真正的分布式事件总线提供程序,分布式事件总线会序列化/反序列化对象。
  • 本地事件总线在数据库级别始终是事务性的。对于分布式事件总线,一旦使用真正的分布式事件总线提供程序,您应启用收件箱/发件箱模式以确保数据一致性。

这些差异是因为分布式事件总线支持分布式场景,而本地事件总线仅用于进程内消息传递。当您未设置真正的分布式事件总线提供程序时,这些差异不适用。

在本文档中