fuliqi
2024-07-01 a745c3b358b97b468711a0ecac11dbe2d5d24018
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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);
    }
}