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

聊聊消息中间件MQ

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

一、概念

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

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

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

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

二、常见的消息队列

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

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

三、优缺点对比

3.1、RabbitMQ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.2、RocketMQ

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

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

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

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

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

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

3.3、Kafka

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、主要应用场景

4.1、流量削峰

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

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

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

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

4.2、应用解耦

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

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

4.3、异步处理

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

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

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

五、选哪一种中间件?

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

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

六、详细对比参数

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

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

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

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

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

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的“在线鉴别”,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 三星Galaxy Z Fold/Flip 5国行售价曝光 :最低7499元/12999元起

    据官方此前宣布,三星将于7月26日也就是明天在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top