博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 整合rabbitmq 实现延时队列
阅读量:4027 次
发布时间:2019-05-24

本文共 1308 字,大约阅读时间需要 4 分钟。

延时队列:生产者刚发布一条信息。消费者想过一段时间进行接收处理操作。我这边用的是插件

1、首先安装插件(rabbitmq_delayed_message_exchange-3.8.0.ez)

下载这个插件后放到rabbitmq安装目录plugins下。然后进入到sbin下执行cmd命令

插件下载地址:

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

然后把rabbitmq服务重新启动 。就会看到多启动了一个插件

 2、接下来就是在代码里进行配置操作

创建路由:x-delayed-type要加上

@Beanpublic CustomExchange createExchange(){    Map
map = new HashMap
(); map.put("x-delayed-type", "direct"); return new CustomExchange( QueueEnum.SIGNLE.getExchangeName(), "x-delayed-message", true, false, map);}

这样还没完。还需要再发送方加上延时时间。下图红色圈中的

 

public void sendMessage(Long orderId,final long delayTimes){    //给延迟队列发送消息    rabbitTemplate.convertAndSend(RabbitMqConfig.QueueEnum.SIGNLE.getExchangeName(),RabbitMqConfig.QueueEnum.SIGNLE.getBindKeyName(), orderId, new MessagePostProcessor() {        @Override        public Message postProcessMessage(Message message) throws AmqpException {            MessageProperties messageProperties = message.getMessageProperties();            messageProperties.setDeliveryMode(MessageDeliveryMode.PERSISTENT);            //给消息设置延迟毫秒值            messageProperties.setExpiration(String.valueOf(delayTimes));            messageProperties.setDelay(9000);            return message;        }    });    LOGGER.info("send orderId:{}",orderId);}

这样就万事大吉了。

转载地址:http://dmvbi.baihongyu.com/

你可能感兴趣的文章
浅谈 Facade 模式
查看>>
设计模式之Factory
查看>>
使用Hibernate进行大数据量的性能测试
查看>>
浅谈HTTP的无状态性
查看>>
程序调用飞信API发送免费短信(JAVA例子,其他语言一样用)
查看>>
向指定URL发送GET方法的请求(java)
查看>>
Oracle select in/exists/not in/not exits
查看>>
浅谈在Hibernate中使用Oracle sequence
查看>>
hibernate------hql总结
查看>>
Spring框架下PropertyPlaceholderConfigurer类
查看>>
Spring的lobhandler
查看>>
struts 标签logic:iterate用法详解
查看>>
Spring+Hibernate中的(FlushMode.NEVER)错误产生及解决
查看>>
spring的BeanUtils.copyProperties用法
查看>>
JAVA读取Oracle中的blob图片字段并显示
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>