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的消费者进行处理,从而实现了消息的延时处理。

相关推荐
m0_564264184 小时前
IDEA DEBUG调试时如何获取 MyBatis-Plus 动态拼接的 SQL?
java·数据库·spring boot·sql·mybatis·debug·mybatis-plus
爱敲键盘的猴子4 小时前
MQ高级 -- RabbitMQ
rabbitmq
ttghgfhhjxkl4 小时前
Windows 系统下 RabbitMQ 延迟插件的安装步骤与常见问题修复
windows·rabbitmq·ruby
即兴随缘4 小时前
【RabbitMQ】RPC模式(请求/回复)
rabbitmq·.net
꒰ঌ 安卓开发໒꒱5 小时前
RabbitMQ面试全解析:从核心概念到高可用架构
面试·架构·rabbitmq
熊小猿5 小时前
在 Spring Boot 项目中使用分页插件的两种常见方式
java·spring boot·后端
paopaokaka_luck5 小时前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring
老华带你飞5 小时前
机器人信息|基于Springboot的机器人门户展示系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·机器人·论文·毕设·机器人门户展示系统
小蒜学长7 小时前
springboot酒店客房管理系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
软件架构师-叶秋9 小时前
spring boot入门篇之开发环境搭建
java·spring boot·后端