RabbitMQ延时消息实现方案(岳小均)
- 格式:pdf
- 大小:1.05 MB
- 文档页数:8
最终选择了方案一
1.
4. 操作步骤
4.1. 建立 delay.exchange
注意事项:
不要设置为Internal,否则将无法接受dead letter
4.2. 建立延时队列(delay queue)
1. 2. 3. 4. 5. 6.
7. 注意事项:
按照延期时间配置queue的名字,建议命名规则为delay.{time}.queue,使用delay前缀方便排序和做一些权限控制cos线上集群默认配置了delay.1m.queue、delay.5m.queue、delay.15m.queue三个队列通过TTL设置队列的延期时间,对应不同的Queue
MAX length为最大的积压的消息个数,推荐设置为100w~500w之间,推测方法见积压测试结果,超过MAX length限制以后,队列头部的消息会立即转到delay.exchange进行投递,不会造成消息丢失设置dead letter exchange为刚才配置的 delay.exchange
注意不要配置"dead letter routing key"否则会覆盖掉消息发送时携带的routingkey,导致后面无法路由
4.3. 配置延时路由规则
4.3.1. 需要延时的消息到exchange后先路由到指定的延时队列
4.3.2. delay.exchange 再重新把消息路由到正常的queue或exchang中
4.3.3. 消费者和以前一样从正常queue中接收消费消息
5. 积压消息测试结果
5.1. 积压测试结论
从实现原理上看,对于持久化消息,内存主要保存的是消息的索引数据,从测试结果也可以验证,可以得出以下数据:
1. a. i. ii. b. c.
2. a. b.
3. 1. 从实现原理上看,对于持久化消息,内存主要保存的是消息的索引数据,从测试结果也可以验证,可以得出以下数据:
内存占用方面估算
消息占用内存的大小确实和消息体本身大小无关,和消息个数直接相关。
消息体为40字节的字符串,积压10万消息,占用101MB内存,23万消息,占用230MB内存消息体为一个整数,积压7万消息,占用64MB内存,24万消息,占用240MB内存
一个消息约占1KB的内存,以10GB内存,留一半余量:5GB/1K=500 0000
线上单个queue推荐线上的max length不要超过500万,根据延迟时间和消息量来调整此值的大小。
消息量估算
以30分钟延迟,每秒发送1000个消息为例,则最大值为:30*60*1000=180 0000
倒推:以500万,30分钟延迟为例,则每秒最多发送的消息个数为:5000000/30/60=2777
消息积压数超过max length以后,消息不会丢失,只。
会导致消息会被提前消费结论:
MAX length推荐这个值设置为,既可以满足业务需求,又不超过内存限制。
100万~500万5.2. 40字节消息积压26万
5.3. 4字节消息积压7万
5.4. 4字节消息积压24万
5.5. 4字节消息积压31万
5.6. 4字节消息积压64万
todo。