前言:好久不见,归来,首先跟大家道歉,许久没有写文章,见谅,以后尽量在工作之余把学到的东西分享给大家,共勉。今天给大家说说MQ一、什么是消息队列消息队列(MessageQueue,简称MQ),本质就是个队列,先进先出,只不过队列中放的是message而已。如下图,上边是我们没有加MQ的简要结构图,下边是加了MQ之后的简要结构图
二、为什么要用消息队列(消息队列的使用场景)比较核心的使用场景有有三个:解耦,异步,削峰1.解耦:我们看图
在不使用MQ的环境下,模块一要发送消息,接收端有模块2,3,4,这时候又要加进模块5,模块1又给模块5写了一套接口,如果到模块n呢,由于不可抗原因模块2要下掉,模块1则要跟着下掉,模块3要有个性化需求了呢?模块4要发送另外一种数据呢?这时候负责模块1的哥们顶不住压力,愤而离职。。。
用了MQ之后变成了上述那样,解耦了,模块1不用管有多少人接受,有多少人要下掉,想起了一句话,你强任你强,老子尼克扬,换到这里就是,你变任你变,老子MQ,哈哈。2.异步场景:A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库,自己本地写库要3ms,BCD三个系统分别写库要300ms、300ms、300ms。
图片来自网络其中activMQ基本上已经不更新了,不建议使用,如果是大数据领域,kafka没商量,rabbitMQ比较稳定,社区活跃度也高,可以用,但是erlang阻止了大量的java工程师,大公司研发实力较强的话rabbitMQ没有问题,大型公司,基础架构研发实力较强,用RocketMQ是很好的选择。
3.镜像模式这种模式,才是所谓的rabbitmq的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论元数据还是queue里的消息都会存在于多个实例上,然后每次你写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。这样的话,好处在于,你任何一个机器宕机了,没事儿,别的机器都可以用。
调整前
领取专属 10元无门槛券
私享最新 技术干货