为什么要使用基于消息的系统?

时间:2008-12-17 12:59:34

标签: language-agnostic messages servicebus

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

我看到很多关于服务总线的问题,例如NServiceBusMass Transit,我想知道基础方法的好处是什么。

9 个答案:

答案 0 :(得分:23)

使用基于消息的系统有很多好处。

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

顺便提一下,这个领域的两个市场领导者是IBM的Websphere MQ及相关产品,以及TIBCO的企业服务总线。

答案 1 :(得分:11)

基于消息的体系结构在时间和空间上消除了消息的生成者和消费者。这有很多好处:

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

当您进行RPC样式的通信时(即在等待服务响应时阻塞),您将失去大部分这些好处。

答案 2 :(得分:10)

一个用例是当你有一个可以处理给定项目的资源池,以及需要以可扩展方式分发的工作列表。

我曾经有过一个项目,我必须与大量的3270屏幕抓取器进行大型机集成(都很慢)。我最多可以在一个盒子上打开10个这样的进程。我有数以千计的帐户进行屏幕删除和更新,所以我把工作放在一个队列中,我的机器(我有大约3个人)只是从消息队列(MSMQ)中拾取工作项并进行屏幕抓取,就是这样。我可以很容易地启动一台新机器,或者在不中断工作流程的情况下停用旧机器,这样很好。

答案 3 :(得分:4)

这些好处实际上取决于解耦应用程序的各个部分。一旦您设置了总线并添加了应用程序,您就可以通过添加新的部分来轻松扩展您的应用程序,您可以保证不会影响其他部分。这是一种随着时间的推移不断添加到系统中的一种非常好的方式。

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

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

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

消息传递是一种神奇的体系结构,虽然它可能比将应用程序紧密耦合在一起要慢,但现在使用它并不是什么原因,特别是如果您已经在使用脚本或.net应用程序。

答案 4 :(得分:0)

我帮助为使用C#和Remoting的系统开发一个,客户端(服务或GUI)可以发送带有一些自定义数据的消息,并且接收者可以在下次连接或立即接收时接收它)。然后,他们可以处理消息(通过在负载平衡服务的情况下获得它的所有权)。它还用于在长时间运行的进程完成时更新GUI。

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

  • 存储(创建/保存邮件到数据库)
  • 路由(找出需要发送消息的地方)
  • 安全性(如果客户被允许接收,则计算出来)
  • 删除(如果需要从系统中删除邮件,则表明需要通知客户端,并从邮件缓存中删除邮件并在数据库中标记)。
  • TakeOwnership(处理确保一次只有一个客户端可以修改消息的状态,因为只有所拥有的消息可以更改)

因此,在回答您的问题时,邮件系统是一种很好的方式,可以在您不知道或不关心客户是谁时发送信息。

答案 5 :(得分:0)

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

消息传递优于这些集成模式的优点是,您没有将两个应用程序耦合到同一个数据存储架构,并且您没有将应用程序绑定到点对点RPC集成场景(随着应用程序越多,应用程序越复杂)参与)。

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

答案 6 :(得分:0)

有一个主要问题,那就是可靠性。在分布式系统中,同步调用可能失败,导​​致下游系统过载。下游系统都需要进行调整以适应来自上游的负载,这是不切实际的。消息系统可以处理峰值问题。更好的是除了使用消息传递系统之外,还使用负载平衡器。当下游应用程序自动扩展时(可能需要几分钟),消息传递系统可以确保可靠地存储峰值。此外,消息传递系统和可靠的发布-子。想象一下,如果有成千上万的交易要发送给数百个交易者..用pub-sub轻松完成。因此,可操作性是可靠性。

答案 7 :(得分:0)

我建议看看这篇博文。它展示了端到端的工作流程,并解释了我们如何以编程方式集成消息传递平台。

https://eduwebmonster.com/implementing-message-based-communication-in-modern-application-architecture/

答案 8 :(得分:0)

基于消息的系统可以为您业务的整个数字方面奠定基础。如今,拥有无缝集成的数字解决方案对于收集、存储和分析数据至关重要,而且至关重要的是,您的数据可以帮助您在业务流程方面做出最明智的决策。本质上,基于消息的服务是一种 API(应用程序编程接口)形式,它可以以消息的形式将请求从一个应用程序发送到另一个应用程序。使用基于消息的系统意味着您的所有数字解决方案都可以轻松连接,并且它们将相互可靠地通信。

请求可以发送到系统内的任何端点,一旦得到验证,它们就可以同时通过多个路径发送。与一次只能使用一个路径的传统请求/响应模型相比,这大大加快了流程。借助 TIBCO 消息传递等服务,您可以跨各种 API 进行通信、支持移动和 IoT 设备、根据需要扩展消息传递服务并简化应用程序开发和采用。当然,该平台也提供了安全的消息传递环境,因此您可以放心,您的数据只会在您自己的应用程序之间共享以用于您的指定目的。

相关问题