使用基于消息的系统的动机是什么?

我看到很多有关服务巴士的信息,例如 N服务总线轨道交通 我想知道底层方法的好处是什么。

有帮助吗?

解决方案

使用基于消息的系统有多个优点。

  1. 消息在应用程序之间形成了明确定义的技术中性接口。
  2. 实现应用程序的松散耦合。
  3. 性能,调整和缩放的许多选项:
    • 在不同的硬件上部署请求者和服务过程
    • 共享单个服务器的多个请求者
    • 多个请求者共享多个服务器
  4. 各种消息中间Wares独立于您的应用程序实现了共同的消息传递模式。
    • 请求/回复
    • 开火并忘记离线更新
    • 发布/订阅
  5. 许多中间件产品处理消息转换(例如Swift至SwiftxML)。
  6. 许多中间件产品可以将单个大要求分解为几个较小的请求。
  7. 他们几乎都支持多个平台。

顺便说一句,该领域的两个市场领导者是IBM,其WebSphere MQ和相关产品以及TIBCO及其企业服务巴士。

其他提示

基于消息的架构在时空和空间上脱颖而出。这有很多好处:

  • 生产者和消费者可以在不同的机器上运行
  • 生产者和消费者可以在不同的时间运行。
  • 生产者和消费者可以在不同的硬件/软件平台上运行(他们只需要了解相同的消息协议)
  • 很容易协调多个生产商 /消费者(例如,如戴夫·马克尔(Dave Markle)所描述的那样,需要多个机器的计算密集型工作)
  • 当服务暂时不可用时,较高的稳定性(例如,在进行订单处理时,使用消息传递系统可以帮助避免“删除”订单)

当您进行RPC风格的沟通时,您将失去大部分这些好处(即等待服务响应时阻止时)

一种用例是,当您拥有可以在给定项目上使用的资源池,以及需要以可扩展方式分发的工作列表。

我曾经有一个项目,我必须使用3270个屏幕刮刀(全部慢)进行大型机集成。我最多可以一次在一个盒子上打开这些过程中的10个。我有成千上万个帐户用于屏幕crape和更新,所以我将作品放在队列中,我的机器(我有大约3个EM)刚刚从消息队列(MSMQ)中捡起工作项目,并进行了屏幕刮擦,就是这样。我可以轻松地旋转一台新机器,或者停用旧机器而不会中断工作流,这很好。

好处实际上在于解耦应用程序的各个部分。设置好总线并添加应用程序后,您可以通过添加新部分轻松扩展您的应用程序,并且可以保证不会影响其他部分。这是随着时间的推移不断向系统添加内容的非常好的方法。

例如。我们有一个这样的系统,每个命令都是作为整个 GUI 的一部分来实现的,如果我们想添加一个新功能,或者修改现有功能,我们只需编写一个新部分并将其添加到系统中即可。当它被调用时,它不依赖于其余部分。这意味着我们可以非常轻松地扩展我们的应用程序。此外,我们在网络上的节点之间传递消息 - 当一台计算机中的某些内容发生更改时,一条消息会发送给所有其他计算机,以便它们可以自行更新。对于不同的事件,我们有一百种不同的消息,因此我们可以通过删除一个对适当消息做出反应的新服务来扩展系统。

消息传递架构通常具有与 Web 服务相同的功能,您可以调用离散服务,也可以轻松添加新服务。

不过,不要认为消息传递架构需要花哨(而且昂贵!)的中间件产品,Windows 运行在消息传递架构上 - 每个传递到窗口的 WM_* 消息都是..好吧,一条消息,我认为这显示了该体系结构的最佳示例 - 系统的任何部分都不需要了解任何其他部分,您可以无限扩展它,因为您可以在任何对话框上处理任意数量的控件等ETC。

消息传递是一个极好的架构,尽管它可能比将应用程序紧密耦合在一起慢,但这并不是现在不使用它的理由,特别是如果您已经在使用脚本或 .net 应用程序。

面向消息的系统通常适用于某些类别的集成问题。其他替代方案是具有共享数据存储(也许基于文件或数据库),以与通过RPC集成或集成的应用程序。

消息传递在这些集成模式上的优点是,您不会将两个应用程序耦合到同一数据存储架构,也不会将应用程序绑定到一个点到点RPC集成方案(涉及更多的应用程序)。

还有异步通信(例如电子邮件与在线聊天)以及消息路由和转换可能性的好处。

我帮助开发了一个用于使用C#和远程的系统,客户端(服务或GUI)可以发送带有一些自定义数据的消息,并且接收者将在接下来或立即连接时接收到它。然后,他们可以处理消息(如果在负载平衡服务的情况下,将其拥有)。长期运行过程完成后,它也用于更新GUI。

消息传递系统本身具有处理每个消息的可配置管道,以下是我们开发的一些管道的一些示例:

  • 存储(创建/保存消息到数据库)
  • 路由(确定需要发送消息的位置)
  • 安全性(如果允许客户收到它,请弄清楚)
  • DELETE(如果需要从系统中删除消息,则可以删除该消息,这意味着需要通知客户端,并从其缓存中删除消息并在DB中标记)。
  • 拥有权(以确保只有一个客户可以一次修改消息状态,因为只有拥有的消息才能更改)

因此,在回答您的问题时,消息传递系统是发送有关您何时不知道或关心谁是客户的绝妙手段。

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