0


项目中使用Cron与RabbitMQ实现定时任务

实现思路:在定时任务中引入rabbitmq的模块,rabbitmq模块添加对应的消息监听,在定时任务模块使用cron的方式配置定时任务。

新建模块service_task,添加依赖,引入之前创建的mq工具类模块

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.lzq</groupId>
  4. <artifactId>rabbit_util</artifactId>
  5. <version>0.0.1-SNAPSHOT</version>
  6. </dependency>
  7. </dependencies>

配置文件

  1. # 服务端口
  2. server.port=8208
  3. # 服务名
  4. spring.application.name=service-task
  5. # 环境设置:dev、test、prod
  6. spring.profiles.active=dev
  7. # nacos服务地址
  8. spring.cloud.nacos.discovery.server-addr=127.0.0.1:8888
  9. #rabbitmq地址
  10. spring.rabbitmq.host=192.168.8.139
  11. spring.rabbitmq.port=5672
  12. spring.rabbitmq.username=guest
  13. spring.rabbitmq.password=guest

创建启动类

  1. @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  2. @EnableDiscoveryClient
  3. public class ServiceTaskApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ServiceTaskApplication.class, args);
  6. }
  7. }

在rabbit-util模块MqConst类添加

  1. //定时任务
  2. public static final String EXCHANGE_DIRECT_TASK = "exchange.direct.task";
  3. public static final String ROUTING_TASK_8 = "task.8";
  4. //队列
  5. public static final String QUEUE_TASK_8 = "queue.task.8";

Task模块对应类

  1. @Component
  2. @EnableScheduling
  3. public class ScheduledTask {
  4. @Autowired
  5. private RabbitService rabbitService;
  6. /**
  7. * cron表达式设置规则
  8. * 每天8点执行 提醒就诊
  9. */
  10. @Scheduled(cron = "0 0 8 * * ?") //每天8点
  11. // @Scheduled(cron = "0/10 * * * * ?")
  12. public void task1() {
  13. System.out.println(new Date().toLocaleString());
  14. //发送短信
  15. rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_TASK, MqConst.ROUTING_TASK_8,"");
  16. }
  17. }

添加mq监听

  1. @Component
  2. public class OrderReceiver {
  3. @Autowired
  4. private OrderInfoService orderService;
  5. @RabbitListener(bindings = @QueueBinding(
  6. value = @Queue(value = MqConst.QUEUE_TASK_8, durable = "true"),
  7. exchange = @Exchange(value = MqConst.EXCHANGE_DIRECT_TASK),
  8. key = {MqConst.ROUTING_TASK_8}
  9. ))
  10. public void patientTips(Message message, Channel channel) throws IOException {
  11. orderService.patientTips();
  12. }
  13. }

OrderService接口和实现

  1. @Override
  2. public void patientTips() {
  3. //查询当天就诊人手机号
  4. QueryWrapper<OrderInfo> queryWrapper = new QueryWrapper<>();
  5. queryWrapper.eq("reserve_date", new DateTime().toString("yyyy-MM-dd"));
  6. //未取消预约的订单
  7. queryWrapper.ne("order_status",-1);
  8. List<OrderInfo> orderInfoList = baseMapper.selectList(queryWrapper);
  9. for (OrderInfo orderInfo : orderInfoList) {
  10. //短信提示
  11. MsmVo msmVo = new MsmVo();
  12. msmVo.setPhone(orderInfo.getPatientPhone());
  13. rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_TASK, MqConst.ROUTING_TASK_8,msmVo);
  14. }
  15. }
标签: rabbitmq 分布式 java

本文转载自: https://blog.csdn.net/weixin_52210557/article/details/122764304
版权归原作者 远走于梦游 所有, 如有侵权,请联系我们删除。

“项目中使用Cron与RabbitMQ实现定时任务”的评论:

还没有评论