MQ消息队列

一、什么是消息队列

    MQ(Message Queue)消息队列,是一种跨进程的通信机制,用于上下游传递信息;作为一个队列,其主要的功能就是排队积压。面对高并发任务时,由于来不及同步处理,请求往往会发生堵塞,表现最为明显的就是对数据库的操作,如大量的insert、update之类的请求同时到达数据库,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。
    此外,当上游服务处理能力远大于下游的情况时,若上游服务直接调用下游服务,由于下游服务处理能力远跟不上上游服务,因此明显的后果就是下游服务因处理压力而导致崩溃.
    因此,MQ提出之初就是为了削峰限流,通过异步处理请求,减少请求相应时间和逻辑及物理上的解耦,从而缓解系统的压力,轻松应对高并发的情况。

二、MQ在互联网中的应用举例

    用户注册信息时,服务端收到用户的注册请求后,它会做这些操作:
【1】校验用户名等信息,如果没问题会在数据库中添加一个用户记录;
【2】如果是用邮箱注册会给你发送一封注册成功的邮件,手机注册则会发送一条短信;
【3】分析用户的个人信息,做消息或应用推送;
【4】发送给用户一个包含操作指南的系统通知等等……
    但是对于用户来说,注册功能实际只需要第一步,只要服务端将他的账户信息存到数据库中他便可以登录上去做他想做的事情了。至于其他的事情,服务端可以把其他的操作放入对应的消息队列中然后马上返回用户结果,由消息队列异步的进行这些操作。

三、MQ背后工作模式

    p2p(point to point)和Publish/Subscribe(Pub/Sub)

3.1. P2P模式
image.png

    P2P模式包含三个角色:消息队列(Queue),发送者(Sender),接收者(Receiver)。每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。

P2P的特点
【1】每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中);
【2】发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列;
【3】接收者在成功接收消息之后需向队列应答成功 。
如果希望发送的每个消息都会被成功处理的话,那么需要P2P模式。

3.2.Pub/sub模式
image.png

    该模式包含三个角色,主题(Topic),发布者(Publisher),订阅者(Subscriber)。 多个发布者将消息发送Topic,系统将这些消息传递给多个订阅者。
Pub/Sub的特点
【1】每个消息可以有多个消费者;
【2】发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息;
【3】为了消费消息,订阅者必须保持运行的状态

    为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
    如果希望发送的消息可以不被做任何处理、或者只被一个消费者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型。

四、MQ使用场景

【1】异步处理
【2】系统解耦
【3】流量削峰
【4】消息通讯

五、使用MQ的不足

【1】多了MQ中间件、系统成本增加,结构更复杂;
【2】消息传递路径更长,延时会增加;
【3】消息可靠性和重复性难以平衡,即不能同时保证消息不丢和不重复;
【4】发布方不知道接收方的执行结果。

【注意事项】:MQ不是任何场景都能使用的,当调用方实时依赖被调用方的执行结果时,不能使用MQ,应该同步调用。

六、常见的消息队列

【1】ActiveMQ
【2】RabbitMQ
【3】ZeroMQ
【4】Kafka(日志处理)
【5】MetaMQ
【6】RocketMQ

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • “ 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列...
    落羽成霜丶阅读 3,984评论 1 41
  • 作为男人的一生,是儿子也是父亲。前半生儿子是父亲的影子,后半生父亲是儿子的影子。 --贾平凹...
    li_d620阅读 286评论 0 0
  • 说说库和框架的区别? JQ(Jquery,不是冰欺凌哦)就是JS的库,打个比方,比如新买的房子需要改水电,那么就需...
    petertou阅读 223评论 0 0
  • 1、关于自己 当你把自己经营到足够好的时候 ,一切你想要的东西都会被吸引到你周围。你若盛开,蝴蝶自来;你若精彩 ,...
    黄大侠的传奇阅读 261评论 0 0