一.消息队列是什么?
消息:在不同的应用服务中间传输的数据
队列:一种先进先出的数据结构
消息队列:一个存放消息的容器;一种中间件;
二.为什么要使用消息队列?使用消息队列能给我们带来什么?
1.异步处理
1.1 提高系统性能和响应速度
相较于传统的串行和并行,异步处理提高了系统的响应速度,减少响应时间
1.2 流量削峰,限流
常见于秒杀活动中,当一下子产生大量请求数据时,先放在消息队列中作为缓冲,避免直接将请求推送到服务端,使得服务端崩溃。并且当消息队列中的数据达到一定值时,不再接收新的请求和数据,直接返回请求失败的结果
2.应用解耦
避免了应用之间的直接调用,去除硬编码,降低耦合性
三.使用消息队列带来的问题
消息队列挂掉怎么办?
数据丢失或者没有被正确消费怎么办?
数据重复消费怎么办?
四.消息队列的一些基本概念
1.JMS
Java Message Service,Java定义的一系列关于面向消息中间件(MOM)的API规范
2.JMS标准的两种模式
2.1 P2P模式,即点对点
分为三个角色:生产者,消息队列,消费者
过程:生产者将生产的消息放进消息队列,消费者从队列中取出消息消费,消费者向消息队列发送确认信息,消息队列删除该消息
特点:每条消息只能被一个消费者消费;一旦某条消息被消费者取走并返还消费确认信息,该消息就会被队列删除;未被消费的消息在队列中保留直至被消费或者超时
2.2 发布订阅模式 pub/sub
分为三个角色:发布者,主题(topic),订阅者
过程:订阅者订阅某个topic,发布者将消息发布至该topic,订阅者获取该topic下的消息
特点:每个消息可以被多个消费者消费;时间上的前后依赖,必须先订阅才能消费;持久订阅和非持久订阅,
3.消费消息的两种方式
3.1 push
当有新消息时,消息队列“主动告知”消费者,消费者才去消费
3.2 pull
消费者不断去轮询消息队列,如果有就消费