标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。