feat()故障事件,监听redsi过期key
parent
04fbe0741a
commit
35244222f0
|
@ -0,0 +1,40 @@
|
||||||
|
package com.hyc.domain;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 故障消息对象
|
||||||
|
*
|
||||||
|
* @author YouChe·He
|
||||||
|
* @ClassName: FaultMessage
|
||||||
|
* @Description: 故障消息对象
|
||||||
|
* @CreateTime: 2024/6/20 15:30
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ToString
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class FaultMessage {
|
||||||
|
/**
|
||||||
|
* VIN
|
||||||
|
*/
|
||||||
|
private String vin;
|
||||||
|
/**
|
||||||
|
* 故障码
|
||||||
|
*/
|
||||||
|
private String faultCode;
|
||||||
|
/**
|
||||||
|
* 发生时间
|
||||||
|
*/
|
||||||
|
private Date occurrenceTime;
|
||||||
|
/**
|
||||||
|
* 动作类型
|
||||||
|
*/
|
||||||
|
private String actionType;
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.hyc.kafka.demo.listener;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.hyc.config.RabbitmqConfig;
|
||||||
|
import com.hyc.domain.FaultMessage;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.connection.Message;
|
||||||
|
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
|
||||||
|
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key过期监听器
|
||||||
|
*
|
||||||
|
* @author YouChe·He
|
||||||
|
* @ClassName: KeyExpiredListener
|
||||||
|
* @Description: key过期监听器
|
||||||
|
* @CreateTime: 2024/6/20 21:59
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class KeyExpiredListener extends KeyExpirationEventMessageListener {
|
||||||
|
|
||||||
|
private RabbitTemplate rabbitTemplate;
|
||||||
|
|
||||||
|
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer,RabbitTemplate rabbitTemplate) {
|
||||||
|
super(listenerContainer);
|
||||||
|
this.rabbitTemplate = rabbitTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(Message message, byte[] pattern) {
|
||||||
|
String expireKey = message.toString();
|
||||||
|
log.info("过期的key:" + expireKey);
|
||||||
|
//在这里做过期key的处理
|
||||||
|
if (expireKey.startsWith("car_")){
|
||||||
|
String[] split = expireKey.split("_");
|
||||||
|
FaultMessage faultMessage = new FaultMessage(split[1], split[2], new Date(), "update");
|
||||||
|
rabbitTemplate.convertAndSend(RabbitmqConfig.FAULT_EXCHANGE,RabbitmqConfig.FAULT_MESSAGE_ROUTINGKEY, JSONObject.toJSONString(faultMessage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.hyc.util;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.hyc.config.RabbitmqConfig;
|
||||||
|
import com.hyc.domain.FaultMessage;
|
||||||
|
import com.hyc.domain.VehicleData;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||||
|
import org.springframework.cache.Cache;
|
||||||
|
import org.springframework.cache.CacheManager;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 事件处理工具类
|
||||||
|
*
|
||||||
|
* @author YouChe·He
|
||||||
|
* @ClassName: EventHandleUtil
|
||||||
|
* @Description: 事件处理工具类
|
||||||
|
* @CreateTime: 2024/6/20 15:55
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class EventHandleUtil {
|
||||||
|
public static void insertToCache(CacheManager cacheManager, RedisTemplate<String,String> redisTemplate, VehicleData vehicleData, String keySuffix, RabbitTemplate rabbitTemplate){
|
||||||
|
Cache faultMessageCache = cacheManager.getCache("faultMessage");
|
||||||
|
Cache.ValueWrapper valueWrapper = faultMessageCache.get("car_"+vehicleData.getVin() + "_"+keySuffix);
|
||||||
|
if (valueWrapper == null){
|
||||||
|
FaultMessage faultMessage = new FaultMessage("car_"+vehicleData.getVin(), keySuffix, new Date(), "insert");
|
||||||
|
//发送故障开始消息
|
||||||
|
log.error("发送故障消息!!!");
|
||||||
|
rabbitTemplate.convertAndSend(RabbitmqConfig.FAULT_EXCHANGE,RabbitmqConfig.FAULT_MESSAGE_ROUTINGKEY,JSONObject.toJSONString(faultMessage));
|
||||||
|
rabbitTemplate.convertAndSend(RabbitmqConfig.FAULT_EXCHANGE,RabbitmqConfig.FAULT_MESSAGE_QUEUE,JSONObject.toJSONString(faultMessage));
|
||||||
|
faultMessageCache.put("car_"+vehicleData.getVin() + "_" + keySuffix, JSONObject.toJSONString(vehicleData));
|
||||||
|
redisTemplate.opsForValue().set("car_"+vehicleData.getVin()+"_"+keySuffix,JSONObject.toJSONString(vehicleData),10, TimeUnit.SECONDS);
|
||||||
|
}else {
|
||||||
|
log.warn("已经存在{}故障",keySuffix);
|
||||||
|
//已经存在此故障,继续添加 再次添加应该会更新缓存时间
|
||||||
|
faultMessageCache.put("car_"+vehicleData.getVin() + "_" + keySuffix, JSONObject.toJSONString(vehicleData));
|
||||||
|
//同时添加到redis,设置过期时间为10S
|
||||||
|
redisTemplate.opsForValue().set("car_"+vehicleData.getVin()+"_"+keySuffix,JSONObject.toJSONString(vehicleData),10, TimeUnit.SECONDS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue