Springboot 集成Rabbitmq之延时队列

1.首先确保已经引入了Spring AMQP和RabbitMQ的相关依赖:

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  1. 创建一个普通队列并设置TTL(消息过期时间),同时声明一个死信交换机和死信队列,当普通队列中的消息过期后会自动转发到死信队列:

    @Bean
    Queue normalQueue() {
    Map<String, Object> args = new HashMap<>();
    args.put("x-message-ttl", 60000); // 消息有效期为60秒
    args.put("x-dead-letter-exchange", "delayExchange"); // 设置死信交换机
    args.put("x-dead-letter-routing-key", "delayQueue"); // 设置死信路由键
    return new Queue("normalQueue", true, false, false, args);
    }

    @Bean
    Queue delayQueue() {
    return new Queue("delayQueue", true, false, false);
    }

    @Bean
    DirectExchange delayExchange() {
    return new DirectExchange("delayExchange");
    }

    @Bean
    Binding delayBinding(DirectExchange delayExchange, Queue delayQueue) {
    return BindingBuilder.bind(delayQueue).to(delayExchange).with("delayQueue");
    }

3.在delayQueue上监听消息,这样当消息从normalQueue过期转移到delayQueue后,消费者就会接收到这条消息:

复制代码
@RabbitListener(queues = "delayQueue")
public void processDelayMessage(String message) {
    System.out.println("Processing delayed message: " + message);
    // 在这里处理延时后的消息
}

4.发送消息到normalQueue:

复制代码
@Autowired
private RabbitTemplate rabbitTemplate;

public void sendMessage(String message) {
    rabbitTemplate.convertAndSend("normalQueue", message);
}

以上代码示例中,正常的消息会被发送到normalQueue,如果在指定的TTL时间内未被消费,则该消息会作为死信转发到delayExchange,然后根据路由键路由到delayQueue,最终由监听delayQueue的消费者进行处理,从而实现了消息的延时处理。

相关推荐
雨辰AI3 小时前
生产级实测:SpringBoot3 + 达梦数据库接口从 200ms 优化至 20ms 完整调优指南
java·数据库·spring boot·后端·政务
砍材农夫6 小时前
物联网实战|Spring Boot + Netty 搭建 MQTT 消息路由与流转层
java·spring boot·后端·物联网·spring
lazy H6 小时前
Spring Boot 项目如何连接 Redis?新手入门配置和常见错误总结
ide·spring boot·redis·后端·学习·intellij-idea
SXJR7 小时前
spring boot + langchain4j +milvus实现向量存储
java·spring boot·后端·大模型·milvus·rag·langchain4j
王木风7 小时前
Spring Boot + LLM 工程化:把短视频流水线拆成 16 个独立角色的踩坑记录
人工智能·spring boot·后端·开源·新媒体运营·音视频·agent
心之伊始8 小时前
Spring AI Chat Memory 实战:用 JDBC 给 Java Agent 加会话记忆
java·spring boot·agent·spring ai·chat memory
柏舟飞流8 小时前
Spring Boot 进阶实战:整合 MyBatis、Redis、JWT,搭一个更像真实项目的后端服务
spring boot·redis·mybatis
llz_1129 小时前
web-第六次课后作业
前端·spring boot·后端
柏舟飞流9 小时前
Spring Boot + Spring Security + RBAC:从登录鉴权到权限模型设计
java·spring boot·spring
2601_961963389 小时前
Spring Boot集成电子签章的7个典型问题与解决方案:从入门到生产级实践
大数据·人工智能·spring boot·python·区块链·智能合约