当前位置:   article > 正文

Springboot 集成Rabbitmq之延时队列

Springboot 集成Rabbitmq之延时队列

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. </dependency>

2. 创建一个普通队列并设置TTL(消息过期时间),同时声明一个死信交换机和死信队列,当普通队列中的消息过期后会自动转发到死信队列:

  1. @Bean
  2. Queue normalQueue() {
  3. Map<String, Object> args = new HashMap<>();
  4. args.put("x-message-ttl", 60000); // 消息有效期为60秒
  5. args.put("x-dead-letter-exchange", "delayExchange"); // 设置死信交换机
  6. args.put("x-dead-letter-routing-key", "delayQueue"); // 设置死信路由键
  7. return new Queue("normalQueue", true, false, false, args);
  8. }
  9. @Bean
  10. Queue delayQueue() {
  11. return new Queue("delayQueue", true, false, false);
  12. }
  13. @Bean
  14. DirectExchange delayExchange() {
  15. return new DirectExchange("delayExchange");
  16. }
  17. @Bean
  18. Binding delayBinding(DirectExchange delayExchange, Queue delayQueue) {
  19. return BindingBuilder.bind(delayQueue).to(delayExchange).with("delayQueue");
  20. }

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

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

4.发送消息到normalQueue:

  1. @Autowired
  2. private RabbitTemplate rabbitTemplate;
  3. public void sendMessage(String message) {
  4. rabbitTemplate.convertAndSend("normalQueue", message);
  5. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/385490
推荐阅读
相关标签
  

闽ICP备14008679号