延迟消息 流程说明 1. 创建 死信交换机(DLX) 和 死信队列 2. 创建业务队列,并配置: xdeadletterexchange xdeadletterroutingkey 3. 消息进入业务队列并等待 TTL 到期 4. 消息过期后转入 DLX 5. 消费者从最终队列中消费消息 代码示例 java // 声明死信交换机 channel.exchangeDeclare("dlxexchange", "direct", true); // 声明死信队列 channel.queueDeclare("dlxqueue", true, false, false, null); channel.queueBind("dlxqueue", "dlxexchange", "dlxroutingkey"); // 创建业务队列并设置死信规则Map args new HashMap<>(); args.put("xdeadletterexchange", "dlxexchange"); args.put("xdeadletterroutingkey", "dlxroutingkey"); args.put("xmessagettl", 10000); //队列级TTL:10秒 channel.queueDeclare("businessqueue", true, false, false, args); //发送消息(消息级 TTL) AMQP.BasicProperties props new AMQP.BasicProperties.Builder() .expiration("5000") // 5 秒后过期 .build(); channel.basicPublish("","businessqueue",props,"延迟消息".getBytes(StandardCharsets.UTF8)); 特点说明 TTL 优先级 同时设置消息 TTL 和队列 TTL 时,取较小值 延迟精度 依赖队列头部过期检查机制,精度非严格实时 实现成本 无需额外组件,但配置相对复杂 方案二:延时消息插件方案 实现原理 通过声明特殊类型的交换机,使消息在 Exchange 层面延迟投递 。 消息在延迟时间到期前不会进入正常路由流程。