SpringBoot下RabbitMq实现定时任务
SpringBoot下RabbitMq实现定时任务 本文主要讲解了如何使用SpringBoot和RabbitMq实现定时任务,通过实例代码来详细介绍了整个过程。下面是对应的知识点: 一、定时任务场景 在实际应用中,我们经常遇到需要在一定时间后执行某个任务的情况,例如订单下单15分钟未付款自动关闭延迟任务。这种场景下,我们可以使用RabbitMq来实现定时任务。 二、RabbitMq实现定时任务原理 RabbitMq实现定时任务的原理是通过两个队列(死信队列和处理队列)和两个交换机(延迟交换机和处理交换机)来实现的。死信队列用于存储需要延迟执行的任务,处理队列用于存储需要立即执行的任务。延迟交换机用于将消息从死信队列发送到处理队列,处理交换机用于将消息从处理队列发送到下一个队列。 三、SpringBoot下RabbitMq配置 在SpringBoot下,我们需要配置RabbitAdmin来声明队列、交换机和绑定关系。我们可以通过@Bean来注入RabbitAdmin,并配置 ignoreDeclarationExceptions为true来忽略声明异常。 四、队列、交换机和绑定的声明 我们可以通过RabbitAdmin来声明队列、交换机和绑定关系。例如,我们可以使用createDelayQueue方法来创建延迟队列,並将其绑定到延迟交换机上。 五、发送消息 当我们需要发送消息时,我们可以使用RabbitTemplate来发送消息,并设置TTL时间来延迟执行任务。 六、代码实现 以下是完整的代码实现过程: ```java @Bean public RabbitAdmin rabbitAdmin(CachingConnectionFactory cachingConnectionFactory){ RabbitAdmin rabbitAdmin = new RabbitAdmin(cachingConnectionFactory); rabbitAdmin.setIgnoreDeclarationExceptions(true); return rabbitAdmin; } @Autowired RabbitAdmin rabbitAdmin; public void createDelayQueue(String queueName,String delayExchange,String delayRoutingKey){ Map<String, Object> map = new HashMap<>(); map.put("x-dead-letter-exchange", delayExchange); map.put("x-dead-letter-routing-key", delayRoutingKey); rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,map)); } public void createQueue(String queueName){ rabbitAdmin.declareQueue(new Queue(queueName,true,false,false,new HashMap<>())); } public void createExchange(String name){ rabbitAdmin.declareExchange(new DirectExchange(name,true,false)); } public void bindQueue(String queueName,String delayExchange,String routeKey){ rabbitAdmin.declareBinding(new Binding(queueName,Binding.DestinationType.QUEUE,delayExchange,routeKey,new HashMap<>())); } public void sendMessageWithTll(String message,String exchange,String routeKey,String tll){ rabbitAdmin.getRabbitTemplate().convertAndSend(exchange, routeKey, message, new MessagePostProcessor() { @Override public Message postProcessMessage(Message message) throws AmqpException { // 设置TTL时间 message.getMessageProperties().setExpiration(tll); return message; } }); } ``` 使用SpringBoot和RabbitMq实现定时任务可以满足各种需要延迟执行任务的场景。
- myloveanan20142020-11-16什么垃圾东西
- 粉丝: 9
- 资源: 955
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G建设和AI技术推动下,中证5G通信ETF的投资价值探讨
- Python项目之淘宝模拟登录.zip
- 课程设计项目:python+QT实现的小型编译器.zip
- (源码)基于AVR ATmega644的智能卡AES解密系统.zip
- (源码)基于C++插件框架的计算与打印系统.zip
- (源码)基于Spring Boot和Vue的苍穹外卖管理系统.zip
- (源码)基于wxWidgets库的QMiniIDE游戏开发环境管理系统.zip
- 通过C++实现原型模式(Prototype Pattern).rar
- 学习记录111111111111111111111111
- 通过java实现原型模式(Prototype Pattern).rar