123
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package com.ruoyi.cai.mq;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.ruoyi.cai.mq.config.RoomCheckDelayMqConfig;
|
||||
import com.ruoyi.cai.mq.config.RoomSettleDelayMqConfig;
|
||||
import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
|
||||
import com.ruoyi.cai.mq.consumer.CalculateSalesQueueConsumer;
|
||||
import com.ruoyi.cai.mq.consumer.CommonConsumer;
|
||||
import com.ruoyi.cai.mq.dto.CommonDTO;
|
||||
@@ -24,9 +27,19 @@ public class AmqpProducer {
|
||||
CommonConsumer.COMMON_KEY, JSON.toJSONString(dto));
|
||||
}
|
||||
|
||||
public void sendCheckTimeOut(String message,Integer timeout){
|
||||
rabbitTemplate.convertAndSend(CheckTimeOutMqConfig.EXCHANGE_NAME,
|
||||
CheckTimeOutMqConfig.ROUTING_KEY,
|
||||
public void sendRoomCheckDelay(String message, Integer timeout){
|
||||
rabbitTemplate.convertAndSend(RoomCheckDelayMqConfig.EXCHANGE_NAME,
|
||||
RoomCheckDelayMqConfig.ROUTING_KEY,
|
||||
message,
|
||||
messagePostProcessor -> {
|
||||
messagePostProcessor.getMessageProperties().setDelay(timeout*1000); // 设置延迟时间,单位毫秒
|
||||
return messagePostProcessor;
|
||||
});
|
||||
}
|
||||
|
||||
public void sendRoomSettleDelay(String message, Integer timeout){
|
||||
rabbitTemplate.convertAndSend(RoomSettleDelayMqConfig.EXCHANGE_NAME,
|
||||
RoomSettleDelayMqConfig.ROUTING_KEY,
|
||||
message,
|
||||
messagePostProcessor -> {
|
||||
messagePostProcessor.getMessageProperties().setDelay(timeout*1000); // 设置延迟时间,单位毫秒
|
||||
@@ -43,17 +56,4 @@ public class AmqpProducer {
|
||||
return messagePostProcessor;
|
||||
});
|
||||
}
|
||||
|
||||
public void sendCommonDelayMq(Integer type,Long roomId,Integer timeout){
|
||||
CommonDelayDto dto = new CommonDelayDto();
|
||||
dto.setType(type);
|
||||
dto.setRoomId(roomId);
|
||||
rabbitTemplate.convertAndSend(CommonDelayMqConfig.EXCHANGE_NAME,
|
||||
CommonDelayMqConfig.ROUTING_KEY,
|
||||
JSON.toJSONString(dto),
|
||||
messagePostProcessor -> {
|
||||
messagePostProcessor.getMessageProperties().setDelay(timeout*1000); // 设置延迟时间,单位毫秒
|
||||
return messagePostProcessor;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.ruoyi.cai.mq;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum CommonDelayTypeEnum {
|
||||
USER_FORBID(1),
|
||||
;
|
||||
private final Integer code;
|
||||
|
||||
CommonDelayTypeEnum(Integer code) {
|
||||
this.code = code;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.cai.mq;
|
||||
package com.ruoyi.cai.mq.config;
|
||||
|
||||
import org.springframework.amqp.core.*;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.cai.mq;
|
||||
package com.ruoyi.cai.mq.config;
|
||||
|
||||
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
|
||||
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.ruoyi.cai.mq;
|
||||
package com.ruoyi.cai.mq.config;
|
||||
|
||||
import org.springframework.amqp.core.*;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -8,11 +8,11 @@ import java.util.HashMap;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class CheckTimeOutMqConfig {
|
||||
public class RoomCheckDelayMqConfig {
|
||||
|
||||
public static final String EXCHANGE_NAME = "checkRoomTimeExchange";
|
||||
public static final String QUEUE_NAME = "checkRoomTimeQueue";
|
||||
public static final String ROUTING_KEY = "checkRoomTimeRouting";
|
||||
public static final String EXCHANGE_NAME = "roomCheckDelayExchange";
|
||||
public static final String QUEUE_NAME = "roomCheckDelayQueue";
|
||||
public static final String ROUTING_KEY = "roomCheckDelayRouting";
|
||||
|
||||
@Bean
|
||||
public CustomExchange delayedExchange() {
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.ruoyi.cai.mq.config;
|
||||
|
||||
import org.springframework.amqp.core.*;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
|
||||
@Configuration
|
||||
public class RoomSettleDelayMqConfig {
|
||||
|
||||
public static final String EXCHANGE_NAME = "roomSettleDelayExchange";
|
||||
public static final String QUEUE_NAME = "roomSettleDelayQueue";
|
||||
public static final String ROUTING_KEY = "roomSettleDelayRouting";
|
||||
|
||||
@Bean
|
||||
public CustomExchange delayedExchange() {
|
||||
HashMap<String,Object> args = new HashMap<>();
|
||||
args.put("x-delayed-type", "direct");
|
||||
return new CustomExchange(EXCHANGE_NAME,
|
||||
"x-delayed-message", // 消息类型
|
||||
true, // 是否持久化
|
||||
false,// 是否自动删除
|
||||
args);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Queue delayedQueue() {
|
||||
return QueueBuilder.durable(QUEUE_NAME)
|
||||
.withArgument("x-delayed-type", "direct")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Binding delayedBinding(Queue delayedQueue,CustomExchange delayedExchange) {
|
||||
return BindingBuilder.bind(delayedQueue).to(delayedExchange).with(ROUTING_KEY).noargs();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,9 +2,9 @@ package com.ruoyi.cai.mq.consumer;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.ruoyi.cai.manager.UserForbidManager;
|
||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
||||
import com.ruoyi.cai.mq.config.CommonDelayMqConfig;
|
||||
import com.ruoyi.cai.mq.dto.CommonDelayDto;
|
||||
import com.ruoyi.cai.mq.CommonDelayMqConfig;
|
||||
import com.ruoyi.cai.ws.job.CheckTimeOutJob;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -13,8 +13,6 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CommonDelayMqConsumer {
|
||||
@Autowired
|
||||
private CheckTimeOutJob checkTimeOutJob;
|
||||
@Autowired
|
||||
private UserForbidManager userForbidManager;
|
||||
|
||||
@@ -23,12 +21,18 @@ public class CommonDelayMqConsumer {
|
||||
public void checkTimeOutMq(String message) {
|
||||
log.info("CommonDelayMqConsumer: " + message);
|
||||
CommonDelayDto dto = JSON.parseObject(message, CommonDelayDto.class);
|
||||
switch (dto.getType()){
|
||||
case 1:
|
||||
checkTimeOutJob.deal(dto.getRoomId());
|
||||
break;
|
||||
case 2:
|
||||
userForbidManager.checkAll();
|
||||
CommonDelayTypeEnum typeEnum = dto.getTypeEnum();
|
||||
if(typeEnum == null){
|
||||
log.warn("延时任务执行失败,未检测到正确的类型 dto={}",JSON.toJSONString(dto));
|
||||
return;
|
||||
}
|
||||
switch (typeEnum){
|
||||
case USER_FORBID:
|
||||
try {
|
||||
userForbidManager.checkExpire(dto.getForbidId());
|
||||
}catch (Exception e){
|
||||
log.error("检查用户封禁状态失败!需要开发确认!",e);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.ruoyi.cai.mq.consumer;
|
||||
|
||||
import com.ruoyi.cai.mq.AmqpProducer;
|
||||
import com.ruoyi.cai.mq.config.RoomCheckDelayMqConfig;
|
||||
import com.ruoyi.cai.ws.job.JobResp;
|
||||
import com.ruoyi.cai.ws.job.RoomCheckJobService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RoomCheckDelayMqConsumer {
|
||||
@Autowired
|
||||
private AmqpProducer amqpProducer;
|
||||
@Autowired
|
||||
private RoomCheckJobService roomCheckJobService;
|
||||
|
||||
@RabbitListener(queues = RoomCheckDelayMqConfig.QUEUE_NAME
|
||||
,containerFactory = "customContainerFactory")
|
||||
public void sendRoomCheck(String roomIdStr) {
|
||||
log.info("开始执行房间检测: roomId={}",roomIdStr);
|
||||
try {
|
||||
Long roomId = Long.valueOf(roomIdStr);
|
||||
JobResp resp = roomCheckJobService.checkRoom(roomId);
|
||||
if(resp.isNextCreateJob()){
|
||||
// 1分钟后继续执行
|
||||
amqpProducer.sendRoomCheckDelay(roomIdStr,60);
|
||||
}
|
||||
}catch (Exception e){
|
||||
log.error("每分钟定时检测房间失败! roomId={}",roomIdStr);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,22 @@
|
||||
package com.ruoyi.cai.mq.consumer;
|
||||
|
||||
import com.ruoyi.cai.mq.AmqpProducer;
|
||||
import com.ruoyi.cai.mq.CheckTimeOutMqConfig;
|
||||
import com.ruoyi.cai.mq.config.RoomSettleDelayMqConfig;
|
||||
import com.ruoyi.cai.ws.service.SettleService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.checkerframework.checker.index.qual.SameLen;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CheckTimeOutMqConsumer {
|
||||
public class RoomSettleDelayMqConsumer {
|
||||
@Autowired
|
||||
private SettleService settleService;
|
||||
@Autowired
|
||||
private AmqpProducer amqpProducer;
|
||||
|
||||
@RabbitListener(queues = CheckTimeOutMqConfig.QUEUE_NAME
|
||||
@RabbitListener(queues = RoomSettleDelayMqConfig.QUEUE_NAME
|
||||
,containerFactory = "customContainerFactory")
|
||||
public void checkTimeOutMq(String message) {
|
||||
log.info("开始执行预扣费: " + message);
|
||||
@@ -25,7 +24,7 @@ public class CheckTimeOutMqConsumer {
|
||||
boolean next = settleService.withholdingFee(Long.valueOf(message));
|
||||
if(next){
|
||||
// 1分钟后继续执行
|
||||
amqpProducer.sendCheckTimeOut(message,60);
|
||||
amqpProducer.sendRoomSettleDelay(message,60);
|
||||
}
|
||||
}catch (Exception e){
|
||||
log.error("每分钟定时扣费失败!",e);
|
||||
@@ -1,11 +1,23 @@
|
||||
package com.ruoyi.cai.mq.dto;
|
||||
|
||||
import com.ruoyi.cai.mq.CommonDelayTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CommonDelayDto {
|
||||
// 1- 房间检测 2-黑名单检测
|
||||
/**
|
||||
* @see com.ruoyi.cai.mq.CommonDelayTypeEnum
|
||||
*/
|
||||
private Integer type;
|
||||
private Long roomId;
|
||||
private Long forbidId;
|
||||
|
||||
public CommonDelayTypeEnum getTypeEnum(){
|
||||
CommonDelayTypeEnum[] values = CommonDelayTypeEnum.values();
|
||||
for (CommonDelayTypeEnum value : values) {
|
||||
if(value.getCode().equals(this.type)){
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user