消息队列MQ简介
  项⽬中要⽤到RabbitMQ,领导让我先了解⼀下。在之前的公司中,⽤到过消息队列MQ,阿⾥的那款RocketMQ,当时公司也做了简单的技术分享,⾃⼰也看了⼀些博客。⾃⼰在有道云笔记上,做了⼀些整理,但后来也就搁在那了。现在有时间,就对MQ的⼀些简单的概念做下整理吧。
  RabbitMQ的⼀些介绍,请参考www.jianshu/p/e55e971aebd8,⾥⾯对⼀些概念和使⽤的讲解还是⾮常详细的。
什么是消息队列-定义
  我们来看下上⾯的定义:
  是⼀种进程间通信或同⼀进程的不同线程间的通信⽅式,软件的软件的贮列⽤来处理⼀系列的输⼊,通常是来⾃⽤户。
  消息队列提供了异步的通信协议,每⼀个贮列中的纪录包含详细说明的数据,包含发⽣的时间,输⼊设备的种类,以及特定的输⼊参数。
  也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,知道接收者取回它。
下⾯是架构图:
Producer:消息⽣产者,负责⽣产和发送消息到Broker;
Broker:消息处理中⼼,负责消息存储、确认、重试等;
Consumer:消息消费中⼼,负责从Broker中获取消息并处理。
消息队列-特性
  异步性:将耗时的同步任务通过发送消息的⽅式进⾏异步处理,减少等待时间。
  松耦合:不同系统、服务之间可以通过消息队列进⾏通信,不⽤关⼼彼此的实现细节,数据格式⼀致。
  分布式:为了防⽌消息堵塞,可以对消费者集进⾏横向扩展,避免单点故障,同样队列本⾝也可以。
  可靠性:将接收到的消息落盘,就算服务器重启或者发⽣故障,恢复之后也能重新加载。
应⽤场景-简单描述
  根据特性,应⽤场景可以简单描述为:
    在处理⾼并发,⽽且不需要⽴即获取结果的时候。
  常⽤的消息队列有:
    RabbitMQ,RocketMQ,ActiveMQ,Kafka等。数据库Redis或者MySQL也可以实现消息队列模式。Redis实现消息队列模式可以参考之前的⼀篇介绍Redis的随笔
应⽤场景-异步处理   
应⽤场景-应⽤解耦
应⽤场景-限流削峰
应⽤场景-⽇志处理
消息模式介绍-简介
1、点对点模式:REQ/REP
  最基本的模式,⽣产者发送⼀条消息,消费者去除并消费信息,给出响应后会从队列中删除该消息,所以不能重复发送,只能被⼀个消费者消费。
进程间通信和线程间通信的区别
2、发布/订阅模式:Pub/Sub
  ⾮常常见也是⾮常有⽤的⼀种模式,将发布者与订阅者进⾏解耦。发布者只负责⽣产数据,⽽不需要关⼼谁是订阅者,有多少订阅者。类⽐于。
3、推/拉模式:Push/Pull
  也是⼀种⽐较重要的模式,⽆论是Push端还是Pull端都可以做服务器,绑定到特定的地址等待对⽅访问。
  如果我们在Push端绑定地址,那么这是⼀个PushServer,对应的PullClient可以链接到这个PushServer往外拉数据;反之,如果建⽴⼀个PullServer,对应的PushClient就可以链接到PullServer并往⾥⾯压数据。
4、路由/代理模式:Router/Dealer
  是⼀种典型的中间⼈模式,⽐较适⽤于多对多的⽹络当中,双⽅在互相不认识的情况下达成共识并交易。类⽐于:顾客--->超时<--供应商。
使⽤TurboMQ的注意事项:
1、避免多线程处理消息,减少异步请求,不要开多余的Task去处理消息
2、减少⽆效的重复推送,⾼并发下可以利⽤Redis做⼀些去重处理。
下图是市场上的⼀些消息队列MQ:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。