“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
“消息队列”是在消息的传输过程中保存消息的容器。 目前的消息队列有很多,例如:Kafka、RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ等。
目录
“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。
1、消息队列的应用场景
1.异步处理业务 (分散系统压力)
2.系统解耦
3.业务削峰
4.日志处理(大数据统计等)
5.生产者、消费者模型(也可以是 供应商和对接平台等)
1、消息队列的应用场景
1.异步处理业务 (分散系统压力)
比如一个用户的登录过程: 1、先校验用户信息 2、记录登录日志 3、邮件推送登录提醒 4、返回登录成功
2.系统解耦
解耦就是将不关联的服务模块拆分、比如 购物车模块、和支付模块、订单模块等拆分。 支付模块服务挂了、我们依然可以创建订单(不受到支付模块系统的影响)、发送消息支付(提高系统健壮性与容错性)。
3.业务削峰
削峰是指业务在极短的时间端内集中爆发(高并发)。例如春节在12306上抢购火车票,大量的用户需要同一时间去抢购;又例如淘宝京东的双十一秒杀,短时间内上亿的用户涌入,瞬间流量巨大;因为服务器处理资源的能力是有限的,当出现请求峰值的时候就很容易造成服务器宕机,用户无法访问的情况出现。
削峰从本质上来说,就是更多地延缓用户请求,以及层层过滤用户的访问需求,遵从【最后落地到数据库的请求数要尽量少】的原则。
消息队列就像是大水库一样,拦截上游的洪水,削减峰值进入下游河道的流量减少,从而达到减免洪水灾害的目的。
4.日志处理(大数据统计等)
日志是跟踪软件运行时所发生的事件的一种方法,简单来说它可以记录某时某刻运行了什么代码,当出现问题时可以方便我们进行定位。而我们在业务上记录日志就会导致接口速度和性能下降、这个时候我们就可以将任意业务节点的日志都推送到消息队列里、提高系统性能。
5.生产者、消费者模型(也可以是 供应商和对接平台等)
生产者 是指产生数据的模块,就形象地称为生产者;
消费者 是处理数据的模块,就称为消费者;
缓冲区 (阻塞队列 可以看文末链接)
生产者和消费者之间的中介就叫做缓冲区。
三者之间的结构图:
消息队列就是实现缓冲区的方法之一。
可以学习java中常用的队列(推荐)
java中常用的队列_java 队列_一名小码农的博客-CSDN博客
数据结构(三) 队列_DJyzh的博客-CSDN博客