1,什么是消息队列

消息队列(message queue)是进程间通信或同一进程的不同线程间的通信方式。

2,消息队列能做什么?

异步处理:例如短信消息等通知,消息推送,用户创建等;就是有些业务不需要同步处理,通知到了做好记录就立即返回,这时就放到消息队列中,在需要或者不忙的时候去处理这些记录

数据同步:业务数据同步,同步到不同的数据存储或者业务线

业务系统解耦合:降低项目之间的依赖关系,通过MQ做数据生产和多端消费,隐藏api接口相互调用,只用遵守相同的数据结构

流量削峰:秒杀场景下的下单处理;访问量剧增的情况下,应用仍然需要继续发挥作用,用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃

数据流处理:日志服务、监控上报
分布式系统产生的海量数据流,如:业务日志、监控数据、用户行为等,针对这些数据流进行实时或批量采集汇总,然后进行大数据分析是当前互联网的必备技术,通过消息队列完成此类数据收集是最好的选择

3,消息队列的核心概念

Producer(生产者),Consumer(消费者),Broker(消息服务器)Topic(主题),ChannelQueue(队列),Message(消息体)

4,消息模式

点对点模型用于消息生产者和消息消费者之间点到点的通信。




消息队列实现短信异步发送 消息队列实现消息推送_数据同步


每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,可以放在内存 中也可以持久化,直到他们被消费或超时。

特点:

  • 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
  • 发送者和接收者之间在时间上没有依赖性
  • 接收者在成功接收消息之后需向队列应答成功
  • 利用FIFO先进先出的特性,可以保证消息的顺序性

Pub/Sub发布订阅


消息队列实现短信异步发送 消息队列实现消息推送_可扩展_02


多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。

特点:

  • 每个消息可以有多个消费者:和点对点方式不同,发布消息可以被所有订阅者消费
  • 发布者和订阅者之间有时间上的依赖性。
  • 针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
  • 为了消费消息,订阅者必须保持运行的状态。

3,消息队列协议

AMQP即Advanced Message Queuing Protocol,是应用层协议的一个开放标准,为面向消息的中间件设计

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议,格式简洁、占用带宽小、移动端通信、PUSH、嵌入式系统

STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息协议,是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。

XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,多用于即时消息(IM)以及在线现场探测。适用于服务器之间的准即时操作。核心是基于XML流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。

4,常用的MQ产品

kafka:provider broker consumer。Kafaka(默认)没有消息确认机制

RabbitMq:broker由exchange、binder queue三部分组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费,RabbitMq有消息确认机制。

后面会单独写文章分别阐述kafka和RabbitMq的原理和应用 综合对比