fuliqi
2024-07-03 526745df87b382366960df1c765b83a84d493019
src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java
@@ -1,14 +1,27 @@
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;
    /**
     * 考试状态更新的消费者
@@ -16,8 +29,17 @@
     * @param message
     */
    @RabbitListener(queues = "examDlxQueue")
    public void examStatusAdjustConsumer(String message){
        System.out.println(message);
    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();
        }
    }
@@ -27,7 +49,7 @@
     * @param message
     */
    @RabbitListener(queues = "meetDlxQueue")
    public void meetConsumer(String message){
    public void meetConsumer(Message message){
        System.out.println(message);
    }
}