中间件——消息队列

1. 消息队列的应用场景

参考网址:
消息队列的四种应用场景

[消息队列设计思路](https://blog.csdn.net/zl1zl2zl3/article/details/51966826)

(1)异步处理

用户注册时,可以同时将 发送邮件 和 发送短信 功能放到消息队列中实现。可以提高用户响应时间,提高系统吞吐量。

(2)应用解耦

用户下单和库存扣账中使用消息,可以防止库存系统出问题后,导致用户下单失败。

(3)流量削峰

秒杀活动中,由于瞬间吞吐量很大,那么可以在客户端和业务处理中间加入消息队列,限制人数,丢弃掉过多的用户请求。这样可以防止流量暴增导致服务器挂掉。

(4)日志处理

日志采集客户端,负责日志数据采集,定时写受写入Kafka队列

Kafka消息队列,负责日志数据的接收,存储和转发

日志处理应用:订阅并消费kafka队列中的日志数据

ELK stack 日志分析。(Elasticsearch, Logstash, Kafka)
(5)消息通讯

点对点通讯

聊天室

2. 消息的重发补偿解决思路

参考网址:RocketMQ 解决消息有序和重复的思路

3. 消息的幂等性解决思路

MQ之如何做到消息幂等

幂等性

MQ消息可达性+幂等性+延时性架构设计

4. 消息的堆积解决思路

处理消息堆积的方法就是把它存下来。只是这个存储可以做成很多方式。比如存储在内存里,存储在分布式KV里,存储在磁盘里,存储在数据库里等等。但归结起来,主要有持久化和非持久化两种。

持久化的形式能更大程度地保证消息的可靠性(如断电等不可抗外力),并且理论上能承载更大限度的消息堆积(外存的空间远大于内存)。
但并不是每种消息都需要持久化存储。很多消息对于投递性能的要求大于可靠性的要求,且数量极大(如日志)。这时候,消息不落地直接暂存内存,尝试几次failover,最终投递出去也未尝不可。

市面上的消息队列普遍两种形式都支持。当然具体的场景还要具体结合公司的业务来看。

5. 消息的有序性保证思路

6. 如何实现自己的消息队列

消息队列设计精要

分布式消息队列实现概要

原文:https://blog.csdn.net/maihilton/article/details/80037824

猜你喜欢

转载自blog.csdn.net/deaidai/article/details/90600056