MQ和ESB的区别

3

有人能告诉我消息队列(MQ)和企业服务总线(ESB)之间有什么区别吗?我知道两者都提供进程间通信和消息处理,但在互联网上没有太多信息,而且每个人的描述都不同。

我也不知道消息代理和ESB之间的区别?ESB是消息代理吗?是不是MQ仅提供标准通信的基本功能,而ESB提供了额外的功能-例如监控等?还是MQ只是基本的消息队列,消息存储在其中,没有任何组件,您就不能对其进行任何操作?

谢谢!


这个回答解决了你的问题吗?消息代理和ESB之间的区别 - Dilan
简单的应用程序差异:MQ:用于系统之间的消息传输。 ESB:转换消息。还有许多其他的差异,但上述差异是非常基础的。 - psingh
1个回答

6

消息代理是一种架构模式 - 一种关于如何制作软件的想法。在维基百科上有一个不错的文章。通常情况下,它是“路由消息的软件服务器”,其中消息是应用级协议。TCP路由器不是消息代理,因为它们在网络层面上路由消息。

总体而言,任何消息队列软件都是一个服务器,它:

  • 用于在客户端之间分发消息
  • 由充当生产者的客户端将消息发送到服务器
  • 消息存储在“队列”中,直到由充当消费者的客户端消费(读取)
  • 按FIFO顺序从队列中读取消息
  • 消费消息会从队列中删除它
  • 消息传递是异步的 - 这意味着生产者和消费者不必同时活动 - 相反,消息由消息队列服务器存储,直到被消费。

任何MQ服务器都是消息代理模式的实现。

有各种各样的MQ产品:ActiveMQ、RabbitMQ和IBM MQ是最流行的例子。它们所有都具有比这个解释更大的功能。

此外,有很多软件不是MQ,但非常接近MQ。Apache Kafka是一种受欢迎的异步消息服务器,它使用主题而不是队列(发布-订阅模式)。ZeroMQ是一个消息库,能够提供很多MQ功能而不使用集中式服务器 - 它是一个带有MQ编程模型的套接字包装器。

ESB - 再次是一种类型的消息服务器软件。但是它是为用户可扩展设计的。在更复杂的情况下,人们需要在简单的消息代理之上具有各种功能。比如根据某些属性(如时间或消息内容)重定向消息。他们想使用http协议生成消息并将其传递为文件。他们想将消息从xml重新格式化为json到edi。他们可以拥有任何他们所需的功能。关键是这些需求需要过于特定的功能,无法仅从互联网下载。作为解决方案,ESB提供了可通过用户编程进行扩展的消息服务器。所有现代ESB都提供编程可扩展性和大量预制模块以满足最常见的情况(文件写入器、http退出、soap解析器等)。在实践中,ESB解决方案庞大(难以学习,易于破坏)且昂贵,因此它们在2020年失去了很多受欢迎程度。但我相信熟练的IT人员可以正确地使用它们。

最后,IBM常常会采用奇怪的命名方式,这经常导致MQ和Broker的混淆。他们的MQ软件在2020年被称为"IBM MQ",在2010年代被称为"WebSphere MQ",在1990年代被称为"MQ Series"。他们的ESB在2020年被命名为"IBM App Connect Enterprise",在2016年被称为"Integration Bus",在2010年被称为"WebSphere Message Broker"。将一个产品命名为"Message Broker"意味着"IBM MQ"不是合适的Broker(如介绍中所定义)。因为谁会在自己的产品组合中拥有多个Broker呢?但这是错误的结论,是由于令人困惑的命名而引起的。MQ与"Message Broker"一样都是消息代理实现的一种形式。它只是一种不同类型的消息代理,更便宜、更专注于某些方面。

很棒的写作!在使用IBM MQ时,你可以按照先进先出(FIFO)或优先级顺序读取消息,我认为这也是JMS规范的一部分。 - JoshMc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接