MQ 杂记
目录
警告
本文最后更新于 2022-02-08,文中内容可能已过时。
MQ 四大作用
异步通信:减少线程等待
- 进入MQ之前的操作都是轻量级的内存计算,进入MQ之后的操作是重量级的验证交易、金额操作等。
系统解耦
削峰填谷:压力大的时候,缓冲部分请求
可靠通信:提供多种消息模式、服务质量、顺序保障等
事件驱动:在每一个步骤结束之后发送事件,不同的步骤会发送一个或者多个事件。然后消费者消费了消息之后,就开始执行下一个步骤。优势是低耦合、高扩展、高可用。
订单超时取消问题
- 设置一个有超时时间的延时队列
- 通过 exchange,来控制消息什么时候被真的投递到队列里,之前是否定Mnesia(基于文件的数据库)里面。
- 防止在过期的时刻前后两头消费,防止并发操作
- 分布式锁
- 乐观锁
SELECT FOR UPDATE
消息处理模式
- 点对点:Queue
- 发布订阅:对应 Topic(Kafka)
Kafka
- Broker:集群中的服务器
- Topic:消息类别,物理上不同 Topic 的消息分开存储【通过顺序写入达到高吞吐】
- Partition:每个 Topic 包含 1~n 个 Partition【可扩展性】
- Producer:生产者,负责发布消息到 Broker,有三种确认模式
- ack = 0 只发送,不管是否成功写入 broker
- ack = 1 写入到 leader 就认为成功
- ack = -1/all 写入到最小副本则认为成功
- Consumer: 消费者,从 Broker 读取消息
- Consumer Group:每个 Consumer 属于一个特定的 Consumer Group
RabbitMQ
安装
|
|