当前位置:首页 > 科技  > 软件

聊聊消息中间件MQ

来源: 责编: 时间:2023-10-24 09:00:15 494观看
导读一、概念图片 消息中间件MQ(Message Queue)是一种常用的异步通信技术,它通过将消息存储在队列中,实现生产者和消费者之间的解耦。MQ的主要作用是保证消息的可靠传输和幂等性。本质是队列,遵循FIFO先进先出原则。只不过队

一、概念

图片图片orJ28资讯网——每日最新资讯28at.com

   消息中间件MQ(Message Queue)是一种常用的异步通信技术,它通过将消息存储在队列中,实现生产者和消费者之间的解耦。MQ的主要作用是保证消息的可靠传输和幂等性。本质是队列,遵循FIFO先进先出原则。只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。orJ28资讯网——每日最新资讯28at.com

    主要是利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。orJ28资讯网——每日最新资讯28at.com

图片图片orJ28资讯网——每日最新资讯28at.com

二、常见的消息队列

     当前业界比较流行的开源消息中间件包括:ActiveMQ、RabbitMQ、RocketMQ、Kafka、 ZeroMQ等,其中应用最为广泛的要数RabbitMQ、RocketMQ、Kafka这三款。orJ28资讯网——每日最新资讯28at.com

图片orJ28资讯网——每日最新资讯28at.com

三、优缺点对比

3.1、RabbitMQ

    RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。orJ28资讯网——每日最新资讯28at.com

图片orJ28资讯网——每日最新资讯28at.com

优点:orJ28资讯网——每日最新资讯28at.com

erlang语言开发,性能极其好,延时很低;orJ28资讯网——每日最新资讯28at.com

吞吐量到万级,MQ功能比较完备;orJ28资讯网——每日最新资讯28at.com

健壮、稳定、易用、跨平台、支持多种语言、文档齐全;orJ28资讯网——每日最新资讯28at.com

有消息确认机制和持久化机制,可靠性高;orJ28资讯网——每日最新资讯28at.com

高度可定制的路由;orJ28资讯网——每日最新资讯28at.com

管理界面较丰富,在互联网公司也有较大规模的应用;orJ28资讯网——每日最新资讯28at.com

社区活跃度高,几乎每个月都发布几个版本。orJ28资讯网——每日最新资讯28at.com

缺点:orJ28资讯网——每日最新资讯28at.com

实现了代理架构,意味着消息在发送到客户端之前可以在中央节点上排队。此特性使得RabbitMQ易于使用和部署,但是使得其运行速度较慢,因为中央节点增加了延迟,消息封装后也比较大。orJ28资讯网——每日最新资讯28at.com

erlang语言开发,很难看懂源码,无法进行源码级别的研究和定制,不利于二次维护和开发。orJ28资讯网——每日最新资讯28at.com

rabbitmq集群动态扩展比较麻烦。orJ28资讯网——每日最新资讯28at.com

3.2、RocketMQ

    RocketMQ 出自 阿里公司的开源产品,用 Java 语言实现,在设计时参考了 Kafka,并做出了自己的一些改进,消息可靠性上比 Kafka 更好。RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。orJ28资讯网——每日最新资讯28at.com

优点:orJ28资讯网——每日最新资讯28at.com

  • 单机支持 1 万以上持久化队列;
  • RocketMQ 的所有消息都是持久化的,先写入系统 PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据,访问时,直接从内存读取;
  • 模型简单,接口易用(JMS 的接口很多场合并不太实用);
  • 性能非常好,可以大量堆积消息在broker中;
  • 支持多种消费,包括集群消费、广播消费等;
  • 各个环节分布式扩展设计,主从HA;
  • 开发度较活跃,版本更新很快。

缺点:orJ28资讯网——每日最新资讯28at.com

  • 支持的客户端语言不多,目前是java及c++,其中c++不成熟;
  • RocketMQ社区关注度及成熟度也不及前两者;
  • 没有web管理界面,提供了一个CLI(命令行界面)管理工具带来查询、管理和诊断各种问题;
  • 没有在 mq 核心中去实现JMS等接口。

orJ28资讯网——每日最新资讯28at.com

3.3、Kafka

    Apache Kafka是一个分布式消息发布订阅系统。它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),,之后成为Apache项目的一部分。Kafka系统快速、可扩展并且可持久化。它的分区特性,可复制和可容错都是其不错的特性。orJ28资讯网——每日最新资讯28at.com

图片图片orJ28资讯网——每日最新资讯28at.com

orJ28资讯网——每日最新资讯28at.com

优点:orJ28资讯网——每日最新资讯28at.com

客户端语言丰富,支持java、、php、ruby、python、go等多种语言;orJ28资讯网——每日最新资讯28at.com

性能卓越,单机写入TPS约在百万条/秒,消息大小10个字节;orJ28资讯网——每日最新资讯28at.com

提供完全分布式架构, 并有replica机制, 拥有较高的可用性和可靠性, 理论上支持消息无限堆积;orJ28资讯网——每日最新资讯28at.com

支持批量操作;orJ28资讯网——每日最新资讯28at.com

消费者采用Pull方式获取消息, 消息有序, 通过控制能够保证所有消息被消费且仅被消费一次;orJ28资讯网——每日最新资讯28at.com

有优秀的第三方Kafka Web管理界面Kafka-Manager;orJ28资讯网——每日最新资讯28at.com

在日志领域比较成熟,被多家公司和多个开源项目使用。orJ28资讯网——每日最新资讯28at.com

缺点:orJ28资讯网——每日最新资讯28at.com

Kafka单机超过64个队列/分区,Load会发生明显的飙高现象,队列越多,load越高,发送消息响应时间变长;orJ28资讯网——每日最新资讯28at.com

使用短轮询方式,实时性取决于轮询间隔时间;orJ28资讯网——每日最新资讯28at.com

消费失败不支持重试;orJ28资讯网——每日最新资讯28at.com

支持消息顺序,但是一台代理宕机后,就会产生消息乱序;orJ28资讯网——每日最新资讯28at.com

社区更新较慢。orJ28资讯网——每日最新资讯28at.com

四、主要应用场景

4.1、流量削峰

图片图片orJ28资讯网——每日最新资讯28at.com

    常用于高并发场景,进行削峰。例如:现在有一个订单系统,高峰期订单量过多,而系统最多只能处理1w次/s。此时可以通过消息队列使得这些超出处理能力的下单请求处于队列中进行等待,而不至于将所有的请求全部一次性打到订单系统中,造成订单系统宕机。这就相当于将实际一秒钟内的订单拆分成多个段来进行处理,这样的处理方式虽然加长了等待时间,但是有缺点总比不能用好。这样可以缓解业务量对系统带来的冲击,避免系统宕机而造成不能使用。orJ28资讯网——每日最新资讯28at.com

     Redis缓存预热。缓存预热实际上是将热点数据提前缓存到Redis中进行储存,避免高峰期数据请求直接下达到数据库造成数据库崩溃。同样流量消峰,也是达到此效果,只不过一个针对的是数据库方面,一个针对的是服务层的请求。orJ28资讯网——每日最新资讯28at.com

参考案例:springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表orJ28资讯网——每日最新资讯28at.com

4.2、应用解耦

图片图片orJ28资讯网——每日最新资讯28at.com

    若订单系统耦合调用支付系统、库存系统或者物流系统,一旦这三个系统发生故障,订单系统就会处于不可用的状态。如果转变为用消息队列处理调用请求,可以减少很多问题。当故障发生时,子系统要处理的内存会被缓存在消息队列中,而用户的下单操作还是可以正常完成;故障处理完之后,再处理用户的订单信息即可。整个过程中的故障对于用户来说是无感的,可以提高系统的可用性。orJ28资讯网——每日最新资讯28at.com

4.3、异步处理

图片图片orJ28资讯网——每日最新资讯28at.com

    当A需要调用B,B需要花很长时间来处理调用,A需要得知B何时处理完毕。可以实现的方式很多,但是很不方便。使用消息队列可以很轻松实现。只需要监听B处理完成的消息即可,当B处理完毕,将处理完毕的信息发送给消息队列,之后消息队列将消息反馈给A即可。这样的方式,A既不用循环调用B的查询API,也不需要B提供callback API(回调API),同时B也不用完成这些操作;A还能及时得到B服务处理完成的信息。orJ28资讯网——每日最新资讯28at.com

参考案例:springBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表orJ28资讯网——每日最新资讯28at.com

五、选哪一种中间件?

图片图片orJ28资讯网——每日最新资讯28at.com

个人建议:对于大部分公司,可以优选选择使用RabbitMQ,其次选择Kafka,相比Kafka,RabbitMQ适合对数据一致性、稳定性和可靠性要求很高的场景,有消息确认机制和持久化机制,可靠性非常高。orJ28资讯网——每日最新资讯28at.com

六、详细对比参数

图片 图片 orJ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-14727-0.html聊聊消息中间件MQ

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 让图片完美适应:掌握 CSS 的object-fit与object-position

下一篇: 如何从单体架构迁移到微服务架构:挑战和最佳实践

标签:
  • 热门焦点
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起“冯提莫”这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的“斗鱼一姐”,冯提莫在游戏直播的年代影响力不输于现
  • 华为Mate 60保护壳曝光:硕大后置相机模组 凸起程度有惊喜

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 苹果MacBook Pro 2021测试:仍不支持平滑滚动

    据10月30日9to5 Mac 消息报道,苹果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后获得了不错的评价,亮点包括行业领先的性能,令人印象深刻的电池续航,精美丰
Top