- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
RabbitMQ 的延时队列和镜像队列原理与实战
展开查看详情
1 .RabbitMQ 特性
2 .RabbitMQ 特性 1.消息的接受者(消费者)
3 . RabbitMQ 特性 1.消息的接受者(消费者) 2. 消息的发送者(⽣产者)
4 . RabbitMQ 特性 1.消息的接受者(消费者) 2. 消息的发送者(⽣产者) 3. 消息的仓储(持久化)
5 . RabbitMQ 特性 1.消息的接受者(消费者) 2. 消息的发送者(⽣产者) 3. 消息的仓储(持久化) 4. 延后传递(堆积)
6 . RabbitMQ 特性 1.消息的接受者(消费者) 2. 消息的发送者(⽣产者) 3. 消息的仓储(持久化) 4. 延后传递(堆积) 5. 复制(⼴播)
7 . RabbitMQ 特性 1.消息的接受者(消费者) 2. 消息的发送者(⽣产者) 3. 消息的仓储(持久化) 4. 延后传递(堆积) 5. 复制(⼴播) 6. 分炼(分类路由)
8 . 消息不可靠 socket.write(msg)
9 .消息不可靠 1. ⽹络故障 2. 宕机 2. kill -9
10 . 消息可靠 1.server deliver后不删除 2. client 收到消息处理后回复ack 3. server 收到ack后删除消息 4.没收到ack消息(关闭后)重新投递
11 . 消息可靠 1.server deliver后不删除 2. client 收到消息处理后回复ack 3. server 收到ack后删除消息 4.没收到ack消息(关闭后)重新投递 5.ack丢失会导致消息重复处理 6.去重(幂等)由业务系统⾃⼰考虑
12 .Auto Ack vs Manual Ack 1.AutoAck 投后即删(no ack) 2. ⽹络故障,消息丢失 3.消费慢,投递风暴 4.缓冲区堆积,Server 写不动 5.链接被Server强制关闭
13 . Auto Ack vs Manual Ack 1. Manual Ack 善解⼈意(照顾客户端) 2. 客户端PrefetchCount 能⼒参数 3. Deliver 有限个消息 4. Ack ⼀个,Deliver ⼀个
14 .⽣产者消息可靠性 消费端的问题⽣产端也会有
15 .⽣产者消息可靠性 ⽣产的消息也会丢
16 .⽣产者消息可靠性 1. fsync ⼏百毫秒⼀次 2. Server 宕机 3. Redis AOF
17 . ⽣产者事务 1. ⽤ select 和 commit 包裹 publish 2.commit要等到fsync才返回,奇慢! 3.批量 publish
18 . ⽣产者确认 1. 等价于 消费者 ack(fsync) 2. ⽣产端需要实现消息重发机制(难) 3. 没有重发机制的confirm没什么⽤(除了降速)
19 . ⽣产者确认(重发) 1. 存内存会丢 2. 存磁盘需要fsync(⽆状态变有状态) 3.存 redis 还会遇到⽹络故障(Redis也会丢) 4.ack丢失,重发会导致消息重复
20 . 消息过期 Queue x-message-ttl 属性 回收站
21 . 死信队列 1. 延时队列 2. 过期时间⽐较死,不灵活 3.不同的过期时间需要不同的过期队列
22 . 死信队列 Retry Later(双重死信) 1. 消息处理异常 客户端reject 消息进⼊死信队列 1. 死信队列⾥消息过期重新⼊队列
23 .死信队列 演⽰
24 . 集群 1. 元信息每个节点都有 2. 队列⾥的消息只有⼀份 3. 客户端只会链接⼀个节点(负载均衡) 4. 服务端转发
25 .镜像队列
26 . 镜像队列 1. 镜像队列列是默默⽆无闻的 2. ha-mode=all|exactly|nodes 3. ha-params=n/2+1 4. x-queue-master-locator=min-master|client-local|random 5. ha-sync-mode=manual|automatic 6. ha-sync-batch-size=1000 7. ha-promote-on-shutdown=when-synced|always 8. ha-promote-on-failure=when-synced|always(v3.7.5+)
27 . 镜像队列 配置 Ram Node 对性能提升⽆益
28 .镜像队列 演⽰
29 .Game Over