14-订单服务定时发送消息-定时发送任务

4.5 定时发送任务

4.5.1 Dao

添加更新任务方法:

//更新任务处理时间
@Modifying
@Query("update XcTask t set t.updateTime = :updateTime where t.id = :id ")
public int updateTaskTime(@Param(value = "id") String id,@Param(value = "updateTime")Date
updateTime);

在这里插入图片描述

4.5.2 Service

添加发送消息方法:

/**
* //发送消息
* @param xcTask 任务对象
* @param ex 交换机id
* @param routingKey
*/
@Transactional
public void publish(XcTask xcTask,String ex,String routingKey){
//查询任务
Optional<XcTask> taskOptional = xcTaskRepository.findById(taskId);
if(taskOptional.isPresent()){
XcTask xcTask = taskOptional.get();
//String exchange, String routingKey, Object object
rabbitTemplate.convertAndSend(ex,routingKey,xcTask);
//更新任务时间为当前时间
xcTask.setUpdateTime(new Date());
xcTaskRepository.save(xcTask);
}
}

在这里插入图片描述

4.5.3 编写任务类

编写任务类,每分钟执行任务,启动订单工程,观察定时发送消息日志,观察rabbitMQ队列中是否有消息,代码
如下:

package com.xuecheng.order.mq;
@Component
public class ChooseCourseTask {
private static final Logger LOGGER = LoggerFactory.getLogger(ChooseCourseTask.class);
@Autowired
TaskService taskService;
//每隔1分钟扫描消息表,向mq发送消息
@Scheduled(fixedDelay = 60000)
public void sendChoosecourseTask(){
//取出当前时间1分钟之前的时间
Calendar calendar =new GregorianCalendar();
calendar.setTime(new Date());
calendar.add(GregorianCalendar.MINUTE,1);
Date time = calendar.getTime();
List<XcTask> taskList = taskService.findTaskList(time, 1000);
//遍历任务列表
for(XcTask xcTask:taskList){
//发送选课消息
taskService.publish(xcTask, xcTask.getMqExchange(),xcTask.getMqRoutingkey());
}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值