rabbitMq延时消费

需求:实现消息的延时推送,推送的时间是配置的,如果消息数量少可以简单通过ScheduledExecutorService线程池方式推送,数据量大时,线程不足以存放,可通过rabbitMq延时消费。配置如下

(1)RabbitMQConfig类中添加

 @Bean
  Queue delayQueuePerMessageTTL() {
      return QueueBuilder.durable(DELAY_QUEUE_PER_MESSAGE_TTL_NAME)
                         .withArgument("x-dead-letter-exchange", DELAY_EXCHANGE_NAME) // DLX,dead letter发送到的exchange
                         .withArgument("x-dead-letter-routing-key", DELAY_PROCESS_QUEUE_NAME) // dead letter携带的routing key
                         .build();
  }
  @Bean
  Queue delayProcessQueue() {
      return QueueBuilder.durable(DELAY_PROCESS_QUEUE_NAME)
                         .build();
  }
  @Bean
  DirectExchange delayExchange() {
      return new DirectExchange(DELAY_EXCHANGE_NAME);
  }
  @Bean
  Binding dlxBinding(Queue delayProcessQueue, DirectExchange delayExchange) {
      return BindingBuilder.bind(delayProcessQueue)
                           .to(delayExchange)
                           .with(DELAY_PROCESS_QUEUE_NAME);
  }

(2)生产者发送队列 DELAY_QUEUE_PER_MESSAGE_TTL_NAME ,消费者消费队列  DELAY_PROCESS_QUEUE_NAME

(3)生产者代码

 AnswerMessage answerMessage = new AnswerMessage();
      answerMessage.setStudentAnswer("你好啊");
      MyCorrelationData<AnswerMessage> correlationData = new MyCorrelationData<AnswerMessage>();
      correlationData.setMessage(answerMessage);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      System.out.println("消息发送时间:"+sdf.format(new Date()));
      myRabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME_DIRECT, RabbitMQConfig.DELAY_QUEUE_PER_MESSAGE_TTL_NAME, answerMessage,
        new MessagePostProcessor() {
        @Override
        public Message postProcessMessage(Message message) throws AmqpException {
          // TODO Auto-generated method stub
          message.getMessageProperties().setExpiration("60000");
          return message;
        }
      }, correlationData);

(4)消费者代码,类中消费消息,处理。

@Component
@RabbitListener(queues=RabbitMQConfig.DELAY_PROCESS_QUEUE_NAME)
public class DealAnswerListener{
	
	
}

(5)具体说明参考 https://www.cnblogs.com/xishuai/p/spring-boot-rabbitmq-delay-queue.html

posted @ 2021-02-22 13:57  哲嘉  阅读(322)  评论(0)    收藏  举报