使用场景列举
1.订单超时未支付自动取消订单
2.一些流程节点发起过期未审核子自动驳回
…
特点
能实时的完成上述业务的处理,不存在定时器那样到了定时器执行的时间,才会执行业务逻辑
流程
消息生产者首先会发送消息到延迟队列上(register_delay_queue),并会给消息设置一个过期时间,过期时间到了后,消息会转发到我们定义的普通队列上(my_queue_name).对于消费者会监听我们的普通队列(my_queue_name),比如我们的订单的超时未支付就取消订单,消费者的业务逻辑就是,通过订单id拿到订单,判断订单状态如果时未支付,就修改订单状态为已失效
TTL(Time To Live)
RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。如果队列设置了,消息也设置了,那么会取小的。
延迟队列配置方法
1、params.put("x-message-ttl", 5 * 1000);
第一种方式是直接设置 Queue 延迟时间 但如果直接给队列设置过期时间,这种做法不是很灵活
2、rabbitTemplate.convertAndSend(book, message -> {
MessageProperties messageProperties=message.getMessageProperties();
messageProperties.setContentEncoding("UTF-8&#