RabbitMQ实现延时队列

流过昼夜 提交于 2020-02-23 22:50:42

RabbitMQ如何实现延时队列?

RabbitMQ实现延时队列一般有两种形式:
**第一种方式:**利用两个特性: Time To live(TTL),Dead letter Exchanges(DLX)[A消息队列过期–>发送给B队列]
**第二种方式:**利用RabbitMQ的插件x-delay-message

RabbitMQ可以针对队列设置x-expires(则队列中所有的消息都有相同的过期时间或者针对Message设置x-message-tt(对消息进行单独设置,每条消息TTL可以不同),来控制消息的生存时间,如果超时(两者同时设置以最先到期的为准),则消息变为dead letter(死信))

Dead Letter Exchanges(DLX)
RabbitMQ的Queue可以配置x-dead-letter-exchange和x-dead-letter-routing-key(可选)两个参数,如果队列中出现dead letter,则按照者两个参数重新路由转换到指定的队列.
x-dead-letter-exchange:出现dead letter重新发送消息到指定exchange
x-dead-letter-routing-key: 出现dead letter之后将dead letter重新按照指定的routing-key发送
在这里插入图片描述
实际应用:

/**
*延时队列-->负责数据展示存储
*/
@Bean
public Queue deaySeckillQueue(){
	return QueueBuilder.durable("delaySeckillQueue")
	.withArGument("x-dead-letter-exchange","seckliExchange")
	.withAragument("x-dead-letter-routing-key,seckillQueue"")
	.bulid();
	}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!