4.2 订单服务结束任务 4.2.1 需求分析
订单服务接收MQ完成选课的消息,将任务从当前任务表删除,将完成的任务添加到完成任务表。 4.2.2 Dao
1、删除xc_task
2、添加xc_task_his
定义过程略 4.2.3 Service
在TaskService中定义删除任务方法
[AppleScript] 纯文本查看 复制代码 //删除任务
@Transactional
public void finishTask(String taskId){
Optional<XcTask> taskOptional = xcTaskRepository.findById(taskId);
if(taskOptional.isPresent()){
XcTask xcTask = taskOptional.get();
xcTask.setDeleteTime(new Date());
XcTaskHis xcTaskHis = new XcTaskHis();
BeanUtils.copyProperties(xcTask, xcTaskHis);
xcTaskHisRepository.save(xcTaskHis);
xcTaskRepository.delete(xcTask); } }
4.2.4 接收完成选课消息
在com.xuecheng.manage_order.mq包下ChooseCourseTask类中添加receiveChoosecourseTask,接收完成选 课任务消息并进行处理。
[AppleScript] 纯文本查看 复制代码 /** * 接收选课响应结果 */ @RabbitListener(queues = {RabbitMQConfig.xc_learning_finishaddchoosecourse}) public void receiveFinishChoosecourseTask(XcTask task,Message message, Channel channel) throws IOException {
LOGGER.info("receiveChoosecourseTask...{}",task.getId());
//接收到 的消息id
String id = task.getId();
//删除任务,添加历史任务
taskService.finishTask(id);
}
4.3 集成测试
测试流程如下:
1、手动向任务表添加一条任务。
2、启动rabbitMQ.
3、启动订单服务、选课服务。
4、观察日志是否添加选课成功 完成任务后将xc_task任务移动到xc_task_his表中
完成任务后在选课表中多了一条学生选课记录
测试消息重复消费:
1、手动向任务表添加一条任务。
2、启动rabbitMQ.
3、先启动订单表,等待消息队列是否积累了多个消息。
4、再启动选课服务,观察是否重复添加选课
|