RabbitMQ:队列消息TTL与生产者单条消息TTL,哪个优先级更高?
消息TTL的判定结果
该消息的TTL是30000毫秒。
在RabbitMQ的机制中,消息级别的过期设置优先级高于队列级别的过期设置:
- 当队列通过
x-message-ttl参数设置了默认消息TTL,同时发送的消息自身通过Expiration属性指定了过期时间时,会以消息自身的设置为准。
结合你的代码来看:
- 队列声明代码:
var args = new Dictionary<string, object>(); args.Add("x-message-ttl", 60000); model.QueueDeclare("myqueue", false, false, false, args);
这里给队列设置了默认的消息TTL为60000毫秒。
- 消息发送代码:
byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!"); IBasicProperties props = model.CreateBasicProperties(); props.ContentType = "text/plain"; props.DeliveryMode = 2; props.Expiration = "30000"; model.BasicPublish(exchangeName, routingKey, props, messageBodyBytes);
这里给这条消息单独指定了Expiration为30000毫秒,这个值会覆盖队列的默认设置,所以该消息的实际TTL是30000毫秒。
内容的提问来源于stack exchange,提问作者Pea Kay See Es
相关产品推荐
相关产品推荐

