我想知道当我们提到 SOA 或中间件时以及通常在应用程序和企业集成的情况下,消息驱动和事件驱动环境之间是否存在明显区别。据我所知,用户界面类似于事件驱动模型,我们的系统拦截用户的操作。

而且很明显,消息传递支持基于发布/订阅、同步或异步通信、事务等的系统。

但是中间件/soa/应用程序集成上下文有区别吗?(架构级别)。我正在尝试查阅维基百科等来源(这里, , 和 这里),但我还是有些困惑。开发人员什么时候应该选择一种解决方案而不是另一种?

是否有一些例子或案例表明一种方法比另一种方法更有意义?或者有任何综合资源和指南来实施每一项?

非常感谢您的任何见解。

有帮助吗?

解决方案

短回答“是有明显的区别”将是“否”。

这些术语不相当互换,但意味着相同的基本结构 - 特别是,你将触发关闭事件或消息的

您引用的第一篇文章是关于低级别的管道,在MOM或发布 - 订阅“公交车”,其传送代表你的消息。事件驱动的架构是构建在该框架上的东西。

术语事件驱动的,同时也适用于GUI代码,是不是真的在相同的抽象级别。在这种情况下,它是一个图案在最小相比沿着消息/事件驱动的线构建整个企业。

其他提示

这里有一个 类型安全/反应性 Jonas Bonér 对这个问题的观点。从第三段开始 这篇博文:

区别在于消息是有方向的,而事件则不是——消息有明确的可寻址收件人,而事件只是为其他人(0-N)观察而发生。

这个问题是问前很长一段时间。我认为,一个更加现代化和明确的回应是href="http://www.reactivemanifesto.org" rel="noreferrer">中的消息驱动(与事件驱动)

  

一个消息是发送到特定目的地的数据项。一个事件是在达到一个给定的状态通过一个部件发射的信号。在一个消息驱动系统寻址的接收者等待消息的到达并反应给他们,否则处于休眠状态。在事件驱动的系统通知监听器被附接到事件的源时被发射的情况下,使得它们被调用。这意味着,一个事件驱动的系统集中于可寻址的事件源,而消息驱动的系统集中于可寻址的接收者。消息可以包含一个编码事件作为有效负载。

驱动架构事件可以具有或不具有消息传送来实现。消息是沟通生产者在一个可靠的,有保证的方式引发的消费者活动的一种方式。特别是当生产者和消费者是真正的分离,并且可以在不同的服务器/虚拟机/环境托管,不具有任何共享内存的直接访问。

然而,在特定的情况下 - 当事件的消费者是相同的应用程序本身内注册的功能/回调,或者当消费者需要被同步执行,那么事件订阅可以在不消息实现

让我们说你正在建设一个支付服务的电子商务网站。当一个订单,购服务将要求您的支付服务授权的顾客的信用卡。只有当信用卡被授权将订单服务发送了该仓库包装和运输。

你需要同意工作队的工作上,以服务于如何,要求用信用卡的授权是从他们的服务你的。有两种选择。

  • 消息驱动的:当一个订单,以服务发出授权请求你支付服务。你的业务流程的请求,并返回的成功/未到了服务。最初的请求和结果可能会被发送同步或异步的。
  • 事件驱动的:当一个订单,以服务发布的新订单的事件。您支付的服务,赞同那个事件的类型,所以它被触发。您的服务请求进行处理和出版AuthorizationAccepted或AuthorizationDeclined事件。所以服务订阅这些事件的类型。所有事件都是异步的。

一个优点的事件驱动的方法 是,其他服务,可以订阅的各种活动。例如,有可能是一个RevenueReporting服务,赞同AuthorizationAccepted事件并造成报告的财务团队。

一个缺点的事件驱动的方法 是,该系统作为一个整体变得有点难以理解。例如,我们说的团队工作的了服务要求你替换AuthorizationDeclined事件与不同的事件视为什么信用卡被拒绝(没有资金、账户关闭时,帐单的地址不正确的,等等)。如果你停止出版AuthorizationDeclined活动,将打破其他一些服务在那里?如果你拥有许多的活动和服务,这可能会难以追查。

由于它是把在很好一文中,为了理解事件驱动设计,而不是看它提出我们要观察什么隐瞒,这就是无非是非常基本的编程的更多;在 “调用栈”。

在事件驱动的设计方法调用的定义进入右窗外。有没有更多的主叫方和被叫方。这是吻别调用顺序和秩序。系统并不需要知道以何种顺序的事情要发生。因此, 共享存储器空间,这是调用堆栈的一个先决条件,变得不必要。

在一个调用堆栈环境然而,不仅调用者知道接下来会发生什么,但它必须能够以一个功能的方法名称相关联。

面向消息的应用程序通过默认来与除去的共享内存。出版商和用户并不需要共享的存储空间。在另一方面,所有其他功能(即顺序,方法名耦合和例如)不是必需品。

如果消息传递被设计以符合事件驱动架构的公理,它们可以被认为是相同的。否则它们之间存在巨大差异。

如果我们使用事件驱动方式,我们通常要发送在该事件源对象 - 组分,其公布的事件。因此,在用户不仅可以获取数据,而且还知道是谁发布的这个事件。例如。在移动开发我们收到的视图,可以是按钮,图像或一些自定义视图。并根据这种观点的类型,我们可以在用户使用不同的逻辑。在这种情况下,我们甚至可以添加一些回处理,修改源组件 - 例如动画添加到那些源视图。

当我们用消息驱动的方法,我们希望与部分数据只发布消息。这不要紧,谁发布的这条消息,我们只想接收数据和处理好歹它的用户。

事件驱动架构和消息驱动架构是两个不同的东西,解决了两个不同的问题。

事件驱动架构重点是系统如何被触发的功能。被认为是在EDA的上下文中的事件触发器的大部分是由比键盘和鼠标等装置产生的事件。这是一个EDA如果让我们明确地认为有关事件发生,事件通道,事件处理引擎。

键盘和鼠标是显而易见的事件生成处理但这些事件已经被各种框架或运行时的照顾,并作为建筑师,我们并不需要担心。有哪些是特定于某个域,这是建筑师,预计去想其他事件。示例 - 供应链管理的事件 - 分拣,包装,发货,配送,零售商,出售等。从技术角度对物联网产业类型的应用程序的事件 - RFID阅读,生物指标读取,传感器数据,条码扫描,系统生成的事件被需要的事件,因为这些事件驱动系统的功能被明确照顾。

消息驱动的体系结构的重点是通过从一个模块传递消息到使用中间件标准消息的系统的另一个模块到分布式系统集成。

在消息概念是抽象的,更具体的类型的消息是事件和命令。

虽然消息都已经在所有没有什么特别的意图,事件通知有关的东西已经发生并已完成(过去)。命令触发一些东西,应该发生(在未来)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top