当前位置:首页 > 数码 > 深入剖析消息中间件MQ-定义-类型和应用 (深入剖析消息的成语)

深入剖析消息中间件MQ-定义-类型和应用 (深入剖析消息的成语)

admin5个月前 (05-05)数码36

消息中间件MQ(Message Queue)是一种用于异步通信的中间件,它通过将消息存储在队列中,实现生产者和消费者之间的解耦。

MQ的主要作用是保证消息的可靠传输和幂等性,本质上是遵循先进先出原则的队列,只不过队列中存放的是消息。同时,MQ也是一种跨进程的通信机制,用于上下游传递消息。

在互联网架构中,MQ是一种非常常见的用于逻辑解耦和物理解耦的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务,主要是利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

常见的MQ

当前业界比较流行的开源MQ包括:

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka
  • 深入剖析消息中间件MQ
  • ZeroMQ

其中,应用最为广泛的是RabbitMQ、RocketMQ和Kafka。

优缺点对比

RabbitMQ

优点:

  • erlang语言开发,性能极好,延时很低
  • 吞吐量到万级,MQ功能比较完备
  • 健壮、稳定、易用、跨平台、支持多种语言、文档齐全
  • 有消息确认机制和持久化机制,可靠性高
  • 高度可定制的路由
  • 管理界面较丰富,在互联网公司也有较大规模的应用
  • 社区活跃度高,几乎每个月都发布几个版本

缺点:

  • 实现了代理架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,但是使得其运行速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
  • erlang语言开发,很难看懂源码,无法进行源码级别的研究和定制,不利于二次维护和开发。
  • rabbitmq集群动态扩展比较麻烦。

RocketMQ

优点:

  • 使用java语言实现,易于开发和维护
  • 性能优异,单机写入TPS约在百万条/秒
  • 提供了较为完备的消息功能,包括:队列、主题、延时消息、顺序消息、事务消息等
  • 支持分布式事务
  • 支持强大的消息过滤功能

缺点:

  • 社区活跃度较低,更新速度较慢
  • 不支持消息回溯

Kafka

优点:

  • 客户端语言丰富,支持java、C++、Python、Go等多种语言
  • 性能卓越,单机写入TPS约在百万条/秒
  • 提供完全分布式架构,并有replica机制,拥有较高的可用性和可靠性,理论上支持消息无限堆积
  • 支持批量操作
  • 消费者采用Pull方式获取消息,消息有序,通过控制能够保证所有消息被消费且仅被消费一次
  • 有优秀的第三方KafkaWeb管理界面Kafka-Manager
  • 在日志领域比较成熟,被多家公司和多个开源项目使用

缺点:

  • Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长
  • 使用短轮询方式,实时性取决于轮询间隔时间
  • 消费失败不支持重试
  • 支持消息顺序,但是一台代理宕机后,就会产生消息乱序
  • 社区更新较慢

主要应用场景

流量削峰

常用于高并发场景,进行削峰。例如:现在有一个订单系统,高峰期订单量过多,而系统最多只能处理1w次/s。此时可以通过MQ使得这些超出处理能力的下单请求处于队列中进行等待,而不至于将所有的请求都压到系统上,导致系统崩溃。

异步解耦

多个系统之间进行交互时,可以通过MQ进行异步解耦。例如:订单系统和库存系统。当用户下单时,订单系统只需要将订单信息发到MQ中,库存系统从MQ中消费订单信息进行处理即可。这样,订单系统和库存系统之间就不需要直接耦合,可以独立部署和维护。

数据缓冲

在一些数据处理场景中,可以将数据先写入MQ中,再由消费者进行处理。例如:日志收集系统。当日志产生时,可以先将日志写入MQ中,然后再由日志处理系统从MQ中消费日志进行处理。这样,可以避免日志处理系统因日志量过大而导致性能下降。


MQ是什么意思?

第一种解释:IBM MQ 介绍:消息队列(MQ)是一种应用程序对应用程序的通信方法。 应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。 消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。 排队指的是应用程序通过队列来通信。 队列的使用除去了接收和发送应用程序同时执行的要求。 IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。 例如,IBM WebSphere MQ 支持 35 种以上的不同操作系统。 IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。 在 IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到 MQI。 如图 3 所示,应用程序直接与其本地队列管理器通过使用 MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。 MQI 的引人之处是它只提供 13 次调用。 这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的。 图形 2. IBM WebSphere MQ 编程图 2 显示了 IBM WebSphere MQ 编程的原理。 第一步是让应用程序与队列管理器连接。 它通过 MQConnect 调用来进行此连接。 下一步使用 MQOpen 调用为输出打开一个队列。 然后应用程序使用 MQPut 调用将其数据放到队列上。 要接收数据,应用程序调用 MQOpen 调用打开输入队列。 应用程序使用 MQGet 调用从队列上接收数据。 图中还显示了消息通道代理(MCA)、通道出口和对象权限管理器(OAM)。 MCA 是 IBM WebSphere MQ 程序,它使用现有传输服务诸如 TCP/IP 与 SNA 将消息从本地传输队列移到目标队列管理器。 这些传输服务即通道。 通道出口是用户写入库,可以在通道运作期间,从已定义位置号之一进入这些库。 OAM 是命令和对象管理的缺省授权服务(针对操作系统)。 这三个组件对 IBM WebSphere MQ 的现有安全性解决方案非常重要。 第二种解释:德商(MQ) 德商(Moral Intelligence Quotient,缩写成MQ),是指一个人的德性水平或道德人格品质。 德商的内容包括体贴、尊重、容忍、宽恕、诚实、负责、平和、忠心、礼貌、幽默等各种美德。 我们常说的“德智体”中是把德放在首位的;科尔斯说,品格胜于知识。 可见,德是最重要的。 一个有高德商的人,一定会受到信任和尊敬,自然会有更多成功的机会。 古人云:“得道多助,失道寡助”、“道之以德,德者得也”,就是告诉我们要以道德来规范自己的行为,不断修炼自己,才能获得人生的成功。 古今中外,一切真正的成功者,在道德上大都达到了很高的水平。 现实中的大量事实说明,很多人的失败,不是能力的失败,而是做人的失败、道德的失败。

什么是MQ?

消息队列(MQ),是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

扩展资料:

MQ传递主干,在世界屡获殊荣。 它帮您搭建企业服务总线(ESB)的基础传输层。IBM WebSphere MQ为SOA提供可靠的消息传递。它为经过验证的消息传递主干, 全方位、 多用途的数据传输, 并帮助您搭建企业服务总线的传输基础设施。

IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。在 IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到 MQI。

应用程序直接与其本地队列管理器通过使用 MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。MQI 的引人之处是它只提供 13 次调用。这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的。

IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。

参考资料:网络百科-MQ

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: MQ