diff --git a/pom.xml b/pom.xml index 37963c4..d0e8c70 100644 --- a/pom.xml +++ b/pom.xml @@ -139,6 +139,12 @@ org.springframework.boot spring-boot-starter-amqp + + + com.github.ben-manes.caffeine + caffeine + 2.9.0 + diff --git a/src/main/java/com/bootdo/datasend/dianxin/cache/DeviceCache.java b/src/main/java/com/bootdo/datasend/dianxin/cache/DeviceCache.java new file mode 100644 index 0000000..d8fbabb --- /dev/null +++ b/src/main/java/com/bootdo/datasend/dianxin/cache/DeviceCache.java @@ -0,0 +1,72 @@ +package com.bootdo.datasend.dianxin.cache; + +import com.alibaba.fastjson.JSON; +import com.bootdo.datasend.dianxin.domain.DevopsDeviceInfo; +import com.bootdo.datasend.dianxin.service.DevopsDeviceInfoService; +import com.bootdo.util.StringKit; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 区域缓存 + * + * @since 2023-09-16 11:04 + */ +@Component +public class DeviceCache { + private static final Logger logger = LoggerFactory.getLogger(DeviceCache.class); + + /** + * + */ + private static final Cache cache = Caffeine.newBuilder().build(); + + private static DevopsDeviceInfoService devopsDeviceInfoService; + + @Autowired + DeviceCache(DevopsDeviceInfoService devopsDeviceInfoService) { + DeviceCache.devopsDeviceInfoService = devopsDeviceInfoService; + //初始化 + load(); + } + + public static String get(String key) { + return cache.get(key, s -> { + try { + return ""; + } catch (Exception e) { + return ""; + } + }); + } + + public static void put(DevopsDeviceInfo bean) { + cache.put(bean.getGbsChannelNo(), JSON.toJSONString(bean)); + } + + /** + * 缓存刷新 + */ + @Scheduled(cron = "0 */30 * * * ?") + public static void refresh() { + load(); + } + + private static void load() { + logger.info("设备表缓存重新加载"); + List list = devopsDeviceInfoService.list(); + Map dictMapCode = list.stream().collect(Collectors.toMap( + e -> "".equals(StringKit.toString(e.getDeviceIp())) ? "err" : e.getDeviceIp(), + e -> JSON.toJSONString(e), (v1, v2) -> v2)); + cache.putAll(dictMapCode); + } +} diff --git a/src/main/java/com/bootdo/datasend/dianxin/config/RabbitConfig.java b/src/main/java/com/bootdo/datasend/dianxin/config/RabbitConfig.java index 28e768e..ed5d302 100644 --- a/src/main/java/com/bootdo/datasend/dianxin/config/RabbitConfig.java +++ b/src/main/java/com/bootdo/datasend/dianxin/config/RabbitConfig.java @@ -13,7 +13,7 @@ public class RabbitConfig { @Bean public Queue myQueue() { // 创建队列 myQueue - return new Queue("myQueue", true); + return new Queue("warnrecord", true); } @Bean public TopicExchange exchange() { diff --git a/src/main/java/com/bootdo/datasend/dianxin/listener/MessageConsumer.java b/src/main/java/com/bootdo/datasend/dianxin/listener/MessageConsumer.java index 059b547..38b0ec5 100644 --- a/src/main/java/com/bootdo/datasend/dianxin/listener/MessageConsumer.java +++ b/src/main/java/com/bootdo/datasend/dianxin/listener/MessageConsumer.java @@ -12,12 +12,12 @@ public class MessageConsumer { private static final Logger logger = LoggerFactory.getLogger(MessageConsumer.class); //测试消费kafka - // 监听队列 "myQueue" -// @RabbitListener(queues = "myQueue") + // 监听队列 "warnrecord" +// @RabbitListener(queues = "warnrecord") public void receiveMessage(String message) { try { // 处理接收到的消息 - logger.info("Received message: " + message.toString()); + logger.info("Received message: " + message); // 在这里添加你对消息的处理逻辑 } catch (Exception e) { // 捕获并打印异常 diff --git a/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java b/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java index b0f1d9c..db0ea0a 100644 --- a/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java +++ b/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java @@ -1,8 +1,11 @@ package com.bootdo.datasend.dianxin.task; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.parser.Feature; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.bootdo.datasend.dianxin.cache.DeviceCache; import com.bootdo.datasend.dianxin.domain.BaseHighThrowRecord; +import com.bootdo.datasend.dianxin.domain.DevopsDeviceInfo; import com.bootdo.datasend.dianxin.domain.dto.HighThrowDto; import com.bootdo.datasend.dianxin.domain.dto.HighThrowRequestDataDTO; import com.bootdo.datasend.dianxin.domain.dto.HighThrowRequestDataListDTO; @@ -40,13 +43,25 @@ public class StandardTask { for (BaseHighThrowRecord h : highThrowRecords) { + String deviceId = h.getDeviceIp(); + String deviceCacheStr = DeviceCache.get(deviceId); + DevopsDeviceInfo deviceInfo = null; + if ("".equals(StringKit.toString(deviceCacheStr))) { + logger.info("当前设备缓存中不存在:" + deviceId); + }else { + logger.info("当前设备获取到缓存:" + deviceId); + deviceInfo = JSON.parseObject(deviceCacheStr, DevopsDeviceInfo.class, Feature.IgnoreNotMatch); + } + HighThrowDto dto = new HighThrowDto(); HighThrowRequestDataDTO dataDTO = new HighThrowRequestDataDTO(); dataDTO.setRequestFlag("1"); HighThrowRequestDataListDTO requestDataListDTO = new HighThrowRequestDataListDTO(); - requestDataListDTO.setGatewaySN(h.getGeminiSn()); + if(deviceInfo!=null){ + requestDataListDTO.setGatewaySN(deviceInfo.getGeminiSn()); + } requestDataListDTO.setWarnType("1001"); requestDataListDTO.setDeviceType("302"); requestDataListDTO.setDeviceSN(h.getGbsChannelNo()); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 13a0512..21a7d91 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,7 +4,7 @@ spring: username: root password: '1qaz!QAZ' # url: jdbc:mysql://221.229.107.118:30519/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT - url: jdbc:mysql://127.0.0.1:30519/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT + url: jdbc:mysql://127.0.0.1:55306/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT driver-class-name: com.mysql.cj.jdbc.Driver initialSize: 5 # 配置初始化大小、最小、最大 minIdle: 5 @@ -31,18 +31,18 @@ spring: properties: hibernate: format_sql: true - rabbitmq: - host: 221.229.107.118 - port: 30529 - username: root - password: 'sm@rtC@m!n23ty' - dynamic: true # rabbitmq: -# host: 110.1.200.11 -# port: 19000 +# host: 221.229.107.118 +# port: 30529 # username: root # password: 'sm@rtC@m!n23ty' # dynamic: true + rabbitmq: + host: 110.1.200.11 + port: 19000 + username: root + password: 'sm@rtC@m!n23ty' + dynamic: true