“消息传递”和“基于事件”之间的大部分困惑与体系结构和实现细节有关。我已经看到(并编写了)事件驱动的系统,这些系统实际上使用OS为实现提供了消息。我猜您真的是在指建筑构想。
正如许多人已经指出的那样,“消息传递”和“基于事件”并不是真正避免混淆的好词。
“消息传递”系统与“基于事件”系统的相对优点是什么?
讯息传递
首先,我要猜测一下,当您说一个“消息传递”系统时,您所谈论的是一个对象将消息传递给另一个特定对象的系统。当我想到基于这种范式的系统时,我通常会想到一种系统,其中检测到某事物的对象知道需要告知某人的信息。(我没有指定它如何知道,只是它知道。)
这种类型的体系结构对于生产者和消费者众所周知的系统非常有用。消息的产生者知道谁必须接收消息,或者消费者必须知道从谁那里得到消息。
如果您正在编写银行业务应用程序,那么您会希望您真的想知道将交易发送给谁以及交易来自谁。
基于事件
我相信您在考虑的另一种系统是,当您说“基于事件”的系统时,一个对象会引发“事件”而不知道谁(如果有人)会做出响应。
这种类型的事件驱动的体系结构非常适合生产者不关心谁消费事件或消费者根本不关心谁生产事件的系统。
通常,在您不知道消费者与生产者之间的关系以及期望这种关系是动态的情况下,这些系统非常有用。
我在其中使用过的一个系统是该应用程序实际上由在运行时加载的动态配置的模块(插件)组成的系统。加载模块后,它将注册它关心的事件。结果是一个非常容易扩展功能的系统。
例如,假设条件A引发了事件EA,该事件通常导致响应RA。导致响应RA的对象只是注册接收事件EA,并在事件到达时对其采取了措施。现在,假设我们要向EA添加一个新的响应,称为RA_1。为此,我们只需添加一个寻找EA并生成响应RA_1的新对象。
以下是一些示例(使用您的术语):
- “消息传递”:您的老板告诉您填写时间表。
- “事件驱动”:部门秘书向所有人发送电子邮件,提醒他们他们的时间表是今天。