package com.ycl.jxkg.rabbitmq.consumer;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.ycl.jxkg.domain.entity.Exam;
|
import com.ycl.jxkg.enums.general.ExamStatusEnum;
|
import com.ycl.jxkg.mapper.ExamMapper;
|
import com.ycl.jxkg.rabbitmq.msg.ExamStatusMsg;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.amqp.core.Message;
|
import org.springframework.amqp.rabbit.annotation.*;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Objects;
|
|
/**
|
* @author:xp
|
* @date:2024/6/28 11:51
|
*/
|
@Component
|
@RequiredArgsConstructor
|
public class Consumer {
|
|
private final ExamMapper examMapper;
|
|
/**
|
* 考试状态更新的消费者
|
*
|
* @param message
|
*/
|
@RabbitListener(queues = "examDlxQueue")
|
public void examStatusAdjustConsumer(Message message){
|
ExamStatusMsg examStatusMsg = JSON.parseObject(message.getBody(), ExamStatusMsg.class);
|
Exam exam = examMapper.selectById(examStatusMsg.getExamId());
|
if (Objects.nonNull(exam) && examStatusMsg.getVersion().equals(exam.getUpdateVersion())) {
|
// 不使用updateById这种方式,避免乐观锁加一。
|
// 因为考试的状态修改一共需要发送两条消息。不能因为第一条消息改了之后,第二条消息因为乐观锁加一了而无法修改
|
new LambdaUpdateChainWrapper<>(examMapper)
|
.eq(Exam::getId, exam.getId())
|
.set(Exam::getStatus, examStatusMsg.getTargetStatus())
|
.update();
|
}
|
}
|
|
|
/**
|
* 会议消费者
|
*
|
* @param message
|
*/
|
@RabbitListener(queues = "meetDlxQueue")
|
public void meetConsumer(Message message){
|
System.out.println(message);
|
}
|
}
|