RabbitMQ 延时消息队列
一、简述 二、示例demo 单个延迟队列 多个延迟队列 一 、简述 延时消息在日常随处可见: 1、订单创建10min之后不发起支付,自动取消。 2、30min定时推送一次邮件信息。 最常用到方式为定时任务轮训,数据量小的时候使用没什么问题 而当有千万甚至上亿的数据量时就会出现数据读取的瓶颈,此时全表扫面进行处理一定是下下策。但是也有比较讨巧的方式,分享公司内部订单拆分的例子: 由于线上每天订单量50万+的增长量,单表早已无法吃撑这个增长的速度。采取的方式为订单归档:线上热数据保留2-3天的数据,其余都归档进入历史订单表中,这样热数据在200万以内。订单超过10min不支付即取消的功能,可以采取简单的扫表形式而不会出现数据读取性能的问题。 这样的方式很简单,但需要跟业务进行沟通妥协,本文会讲另一种方式即RabbitMQ延迟队列。RabbitMQ实际并没有直接实现延时队列,但可利用RabbitMQ提供的属性来模拟延时队列,甚至已经有的配套的插件 rabbitmq_delayed_message_exchange 下面先介绍使用到的RabbitMQ的属性。 1、消息的Time To Live (TTL) x-message-ttl:消息过期时间,超过过期时间之后即变为死信(Dead-letter)不会再被消费者消费。 设置消息TTL有两种方式: 创建队列时指定x-message-ttl