mq
文章目录
消息队列
选型要点 勾 ✔ 叉 ✖
功能性 | Kafka | Pulsar | RocketMQ | RabbitMQ | NSQ |
---|---|---|---|---|---|
消费推拉模式 | pull | push | pull | push | push |
延迟队列 | ✖ | ✔ | ✔ | ✔ | ✔ |
死信队列 | ✖ | ✔ | ✔ | ✔ | ✖ |
优先级队列 | ✖ | ✖ | ✖ | ✔ | ✖ |
消息回溯 | ✔ | ✔ | ✔ | ✖ | ✖ |
消息持久化 | ✔ | ✔ | ✔ | ✔ | ✔ |
消息确认机制 | Offset | Offset+单条 | Offset | 单条 | 单条 |
消息TTL | ✖ | ✔ | ✔ | ✔ | ✖ |
多租户隔离 | ✖ | ✔ | ✖ | ✖ | ✖ |
消息顺序性 | 分区有序 | 流模式有序 | 消费者加锁 | ✖ | ✖ |
消息查询 | ✖ | ✔ | ✔ | ✔ | ✖ |
消息可靠性 | request.requeired.acks | Ack Quorum Size(Qa)) | 镜像模式 | mem-queue-size | |
高可用 | 分布式 | 分布式 | 主从 | 主从 | 分布式 |
集群扩容 | 增加节点,通过复制数据均衡 | 增加节点,通过新增分片负载均衡 | 增加节点 | 增加节点 | 增加节点 |
RabbitMQ
死信队列,用来存放那些没有成功消费的消息,通常可以用来作为消息重试
消息被拒绝、消息过期、队列达到最大长度
- 路由键和生产者发布消息事指定的路由键不同,导致找不到消费者,导致无法消费
- 消息本身问题,莫格关键词为空无法消费,一直处理失败,反复重新进入队列,引起消息积压
- 消息队列的数量超过了设置的最大队列长度
延时队列用来存放指定时间被处理元素的队列,未支付订单取消
常用交换器
- direct 点对点,一对一,交换机绑定队列,消息与特定路由键匹配
- topic 主题交换机,或通配符交换机,使用通配符去匹配路由到对应的队列
- fanout 队列绑定到交换机上,发送到交换机的消息会被转发与该交换机绑定的所有队列上,像子网广播(或发布订阅)
- headers 与上述三种不同,不用路由键匹配,匹配请求头中多所带的键值进行路由
消息积压
- 增加消费者处理能力,或减少发布频率,增加消费端实例
- 考虑使用队列最大长度限制
- 给消息设置TTL,超时丢弃
文章作者 小叨
上次更新 2023-04-20