业务内部消化设计
- 新建 WorkManagerRunner 类 继承 ApplicationRunner 随spring boot程序启动
- 启动时调用 ① 方法,同时启动生产者和消费者
1. public void run(ApplicationArguments args) throws Exception { logger.info("start WorkManager"); workManager.startToWork(); } public void startToWork(){ startAllConsumer(); startProducer(); }
- 每分钟一次执行 producer ,查询状态为0的 ‘短信触达订单’ ,将其封装到Task中。
- 将Task放入队列 BlockingQueue<Task> 中 ,然后将对应 ‘短信触达订单’ 状态变为DOING
- 【第五步与第二步同步】获取系统支持的线程数量,将Consumer放入线程池中,同时传入 BlockingQueue<Task>
- 从 queue 中取出 producer 放入的Task ,开始处理业务逻辑
- 处理完成后将Task中对应的 ‘短信触达订单’ 状态变为DONE
- 异常则变为 Error