有人能告诉我消息队列(MQ)和企业服务总线(ESB)之间有什么区别吗?我知道两者都提供进程间通信和消息处理,但在互联网上没有太多信息,而且每个人的描述都不同。
我也不知道消息代理和ESB之间的区别?ESB是消息代理吗?是不是MQ仅提供标准通信的基本功能,而ESB提供了额外的功能-例如监控等?还是MQ只是基本的消息队列,消息存储在其中,没有任何组件,您就不能对其进行任何操作?
谢谢!
有人能告诉我消息队列(MQ)和企业服务总线(ESB)之间有什么区别吗?我知道两者都提供进程间通信和消息处理,但在互联网上没有太多信息,而且每个人的描述都不同。
我也不知道消息代理和ESB之间的区别?ESB是消息代理吗?是不是MQ仅提供标准通信的基本功能,而ESB提供了额外的功能-例如监控等?还是MQ只是基本的消息队列,消息存储在其中,没有任何组件,您就不能对其进行任何操作?
谢谢!
消息代理是一种架构模式 - 一种关于如何制作软件的想法。在维基百科上有一个不错的文章。通常情况下,它是“路由消息的软件服务器”,其中消息是应用级协议。TCP路由器不是消息代理,因为它们在网络层面上路由消息。
总体而言,任何消息队列软件都是一个服务器,它:
任何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"一样都是消息代理实现的一种形式。它只是一种不同类型的消息代理,更便宜、更专注于某些方面。