ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

rabbitMq延时消费

2021-02-22 14:03:32  阅读:186  来源: 互联网

标签:QUEUE 消费 return NAME PROCESS rabbitMq DELAY 延时 new


需求:实现消息的延时推送,推送的时间是配置的,如果消息数量少可以简单通过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

标签:QUEUE,消费,return,NAME,PROCESS,rabbitMq,DELAY,延时,new
来源: https://www.cnblogs.com/lianguoer/p/14429875.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有