消息中间件学习记录1
2018-11-16·Message Queue, NSQ, Distributed Systems
为什么使用消息中间件?
实现解耦和缓冲功能。
NSQ 架构
以购物系统为例:
- 订单系统创建订单后,往队列 push 一条 topic 为 "create order" 的消息
- NSQ 将消息推送给订阅了相关 topic 的机器
- 通过队列实现各服务系统之间的解耦和缓冲
NSQ 核心模块
- nsq:存储消息,每个 topic 可有多个 channel
- nsqlookup:服务发现模块,记录 topic、channel 及其订阅的消费者
- nsqadmin:可视化管理 Web UI
Channel 是消费者订阅时自动创建的(topic 需手动创建)。
实现细节
- 消息至少投递一次:成功返回 FIN,失败返回 REQ,超时 requeue
- 重试次数:通过
attempts字段判断 - 消息是无序的
- Push 方式推送:保证实时性。消息存在内存中,超过
memqueue-size持久化到磁盘 - 流量控制:通过
rdy_count字段控制是否继续推送
消息中间件设计要点
- 必须能够集群,可扩展性强,性能好,可靠性高
- 关键特性:消息投递策略、消息时序性、推送方式(push/pull)、存储方式(内存/磁盘)
#Message Queue#NSQ#Distributed Systems