diff --git a/zhilian-modules/zhilian-resolver/pom.xml b/zhilian-modules/zhilian-resolver/pom.xml index c470151..8cb370a 100644 --- a/zhilian-modules/zhilian-resolver/pom.xml +++ b/zhilian-modules/zhilian-resolver/pom.xml @@ -117,11 +117,19 @@ org.eclipse.paho org.eclipse.paho.client.mqttv3 + + com.zhilian zhilian-common-business + + + org.springframework.kafka + spring-kafka + + diff --git a/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/consumer/KafkaConsumer.java b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/consumer/KafkaConsumer.java new file mode 100644 index 0000000..d1b7ea0 --- /dev/null +++ b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/consumer/KafkaConsumer.java @@ -0,0 +1,10 @@ +package com.zhilian.resolver.consumer; + +import org.springframework.kafka.annotation.KafkaListener; + +public class KafkaConsumer { + @KafkaListener(topics = "test-topic", groupId = "group", properties = {"bootstrap.servers = 10.10.25.5:9092"}) + public void getMessage(String msg) { + System.out.println("接收到消息:" + msg); + } +} diff --git a/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/model/ModelsKafkaMessage.java b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/model/ModelsKafkaMessage.java new file mode 100644 index 0000000..eda5323 --- /dev/null +++ b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/model/ModelsKafkaMessage.java @@ -0,0 +1,88 @@ +package com.zhilian.resolver.model; +import com.zhilian.common.core.utils.SpringUtils; +import com.zhilian.common.resolver.domain.ResolverReportData; +import com.zhilian.resolver.service.ResolverEventService; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import static com.zhilian.resolver.utils.ConvertUtils.hexStringToString; +import static com.zhilian.resolver.utils.ConvertUtils.parseVehicleData; + +/** + * @ClassName ModelsKafkaMessage + * @Description 描述 + * @Author Can.J + * @Date 2024/4/8 + */ +@Component +@Slf4j +public class ModelsKafkaMessage { + private static final String TOPIC_NAME = "test-topic"; + private static final String BOOTSTRAP_SERVERS = "10.10.25.5:9092"; + + static ArrayList stringEvents = new ArrayList<>() { + { + add("malfunction"); //故障事件 + add("event-realTimeTrajectory"); //实时轨迹数事件 + add("event-storage"); //存储服务事件 + add("geofence"); //电子围栏事件 + } + }; + /** + * 消费者配置 + * @return + */ + @Scheduled(fixedDelay = 50) + private static void consumerMessages() { + Properties props = new Properties(); + props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS); + props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-consumer-group"); + props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); + props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); + + //创建消费者 + KafkaConsumer consumer = new KafkaConsumer<>(props); + + try { + + //订阅主题 + consumer.subscribe(Collections.singletonList(TOPIC_NAME)); + + //持续消费消息 + while (true) { + ConsumerRecords records = consumer.poll(Duration.ofMillis(100)); + records.forEach(record -> { + System.out.println("接收到的数据:" + record.value()); + String str = hexStringToString(record.value()); + List resolverReportDataList = parseVehicleData(str); + for (ResolverReportData vehicleData : resolverReportDataList) { + log.info("解析到车辆数据:{}", vehicleData); + //str-->vehicleDataList-->vehicleData实例 + log.info("解析到车辆数据:{}", vehicleData); + for (String stringEvent : stringEvents) { + ResolverEventService resolverEventService =SpringUtils.getBean(stringEvent); + resolverEventService.execute(vehicleData); + + } + + } + }); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + consumer.close(); + } + } + + +} diff --git a/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/resolverReport/ResolverMqttMsg.java b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/resolverReport/ResolverMqttMsg.java index 1d621dc..b6a5298 100644 --- a/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/resolverReport/ResolverMqttMsg.java +++ b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/resolverReport/ResolverMqttMsg.java @@ -1,6 +1,5 @@ package com.zhilian.resolver.resolverReport; import com.zhilian.common.core.utils.SpringUtils; -import com.zhilian.common.core.utils.StringUtils; import com.zhilian.common.resolver.domain.ResolverReportData; import com.zhilian.resolver.service.ResolverEventService; import com.zhilian.resolver.service.ResolverReportInfoService; diff --git a/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/utils/ConvertUtils.java b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/utils/ConvertUtils.java new file mode 100644 index 0000000..ce0da03 --- /dev/null +++ b/zhilian-modules/zhilian-resolver/src/main/java/com/zhilian/resolver/utils/ConvertUtils.java @@ -0,0 +1,413 @@ +package com.zhilian.resolver.utils; + +import com.zhilian.common.resolver.domain.ResolverReportData; +import lombok.extern.slf4j.Slf4j; + +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; + +/** + * @ClassName ConvertUtils + * @Description ConvertUtils + * @Author Can.J + * @Date 2024/4/8 + */ + +@Slf4j +public class ConvertUtils { + public static String generateGTA() { + // 生成四位以"GTA"开头的字符串 + String prefix = "GTA"; + // 生成三位随机数字 + String randomNumber = generateRandomNumber(4); + // 拼接字符串 + return prefix + randomNumber; + } + + public static String generateRandomNumber(int length) { + // 生成随机数 + Random random = new Random(); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length; i++) { + // 生成0到9之间的随机数字,并转换为字符串 + sb.append(random.nextInt(10)); + } + return sb.toString(); + } + /** + * 16进制转换成为string类型字符串 + * + * @param s + * @return + */ + public static String hexStringToString(String s) { + if (s == null || s.equals("")) { + return null; + } + s = s.replace(" ", ""); + byte[] baKeyword = new byte[s.length() / 2]; + for (int i = 0; i < baKeyword.length; i++) { + try { + baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); + } catch (Exception e) { + e.printStackTrace(); + } + } + try { + s = new String(baKeyword, StandardCharsets.UTF_8); + } catch (Exception e1) { + e1.printStackTrace(); + return s; + } + return s; + } + + // 解析数据 字符串切割 获取适合的数据 + public static List parseVehicleData(String str) { + List vehicleDataList = new ArrayList<>(); + ResolverReportData vehicleData = new ResolverReportData(); + + vehicleData.setVin(str.substring(1,18)); + + log.info("vin=="+vehicleData.getVin()); + + //时间 + String tim =str.substring(18,31); + long timestamp = Long.parseLong(tim); + + log.info("时间串=="+tim); + Date date = new Date(timestamp); + System.out.println("时间"+date); + vehicleData.setCreateTime(date); + log.info("shijian =="+vehicleData.getCreateTime()); + + //经度 + String lt = str.substring(31,42); + log.info("经度串==:{}",lt); + // 如果末尾是零,则舍去 + int endIndex = lt.length() - 1; + while (lt.charAt(endIndex) == '0'){ + endIndex--; + } + + String longitude = lt.substring(0, endIndex + 1); + vehicleData.setLongitude(longitude); + log.info("经度 =="+vehicleData.getLongitude()); + + //维度 + String latitudeIndex =str.substring(42,52); + log.info("维度串==:{}",latitudeIndex); + int endIndexT = latitudeIndex.length() - 1; + while (latitudeIndex.charAt(endIndexT) == '0'){ + endIndexT--; + } + + String latitude = latitudeIndex.substring(0, endIndexT + 1); + vehicleData.setLatitude(latitude); + log.info("维度==:{}",vehicleData.getLatitude()); + + //速度speed + String speed =str.substring(52,58); + log.info("速度==:{}",speed); + vehicleData.setSpeed(speed); + log.info("速度==:{}",vehicleData.getSpeed()); + + //里程 + BigDecimal mileage= new BigDecimal(str.substring(58,69)); + log.info("里程==:{}",mileage); + mileage=mileage.stripTrailingZeros(); + vehicleData.setMileage(mileage); + log.info("里程==:{}",vehicleData.getMileage()); + + //总电压 + String voltage =str.substring(69,75); + log.info("总电压==:{}",voltage); + while (voltage.endsWith("0")) { + voltage = voltage.substring(0, voltage.length() - 1); // 去除末尾的零 + } + vehicleData.setVoltage(voltage); + log.info("总电压==:{}",vehicleData.getVoltage()); + + //总电流 + String current =str.substring(75,80); + log.info("总电流==:{}",current); + while (current.endsWith("0")){ + current=current.substring(0,current.length()-1); + } + vehicleData.setCurrent(current); + log.info("总电流==:{}",vehicleData.getCurrent()); + + //绝缘电阻 resistance + String res =str.substring(80,89); + log.info("绝缘电阻==:{}",res); + String resistance = res.substring(0, 5); + vehicleData.setResistance(resistance); + log.info("绝缘电阻==:{}",vehicleData.getResistance()); + + //档位 + String gear =str.substring(89,90); + log.info("档位==:{}",gear); + vehicleData.setGear(gear); + log.info("档位==:{}",vehicleData.getGear()); + + //accelerationPedal 加速踏板行程值 + String accelerationPedal =str.substring(90,91); + log.info("加速踏板行程值==:{}",accelerationPedal); + vehicleData.setAccelerationPedal(accelerationPedal); + log.info("加速踏板行程值==:{}",vehicleData.getAccelerationPedal()); + + //brakePedal 制动踏板行程值 + String brakePedal =str.substring(92,93); + log.info("制动踏板行程值==:{}",brakePedal); + vehicleData.setBrakePedal(brakePedal); + log.info("制动踏板行程值==:{}",vehicleData.getBrakePedal()); + + //fuelConsumptionRate 燃料消耗率 + String fuelConsumptionRate =str.substring(94,99); + log.info("燃料消耗率==:{}",fuelConsumptionRate); + vehicleData.setFuelConsumptionRate(fuelConsumptionRate); + log.info("燃料消耗率==:{}",vehicleData.getFuelConsumptionRate()); + + //motorControllerTemperature 电机控制器温度 + String motorControllerTemperature =str.substring(99,105); + while (motorControllerTemperature.endsWith("0")){ + motorControllerTemperature=motorControllerTemperature.substring(0,motorControllerTemperature.length()-1); + } + log.info("电机控制器温度==:{}",motorControllerTemperature); + vehicleData.setMotorControllerTemperature(motorControllerTemperature); + log.info("电机控制器温度==:{}",vehicleData.getMotorControllerTemperature()); + + //motorSpeed 电机转速 + String motorSpeed =str.substring(105,110); + log.info("电机转速==:{}",motorSpeed); + vehicleData.setMotorSpeed(motorSpeed); + log.info("电机转速==:{}",vehicleData.getMotorSpeed()); + + //motorTorque 电机转矩 + String motorTorque =str.substring(110,114); + log.info("电机转矩==:{}",motorTorque); + while (motorTorque.endsWith("0")){ + motorTorque=motorTorque.substring(0,motorTorque.length()-1); + } + vehicleData.setMotorTorque(motorTorque); + log.info("电机转矩==:{}",vehicleData.getMotorTorque()); + + + //motorTemperature 电机温度 + String motorTemperature =str.substring(114,120); + log.info("电机温度==:{}",motorTemperature); + while (motorTemperature.endsWith("0")){ + motorTemperature=motorTemperature.substring(0,motorTemperature.length()-1); + } + vehicleData.setMotorTemperature(motorTemperature); + log.info("电机温度==:{}",vehicleData.getMotorTemperature()); + + //motorVoltage 电机电压 + String motorVoltage =str.substring(120,125); + log.info("电机电压==:{}",motorVoltage); + while (motorVoltage.endsWith("0")){ + motorVoltage=motorVoltage.substring(0,motorVoltage.length()-1); + } + vehicleData.setMotorVoltage(motorVoltage); + log.info("电机电压==:{}",vehicleData.getMotorVoltage()); + + //motorCurrent 电机电流 + String motorCurrent =str.substring(125,133); + log.info("电机电流==:{}",motorCurrent); + while (motorCurrent.endsWith("0")){ + motorCurrent=motorCurrent.substring(0,motorCurrent.length()-1); + } + vehicleData.setMotorCurrent(motorCurrent); + log.info("电机电流==:{}",vehicleData.getMotorCurrent()); + + //remainingBattery 动力电池剩余电量SOC + BigDecimal remainingBattery = new BigDecimal(str.substring(133,138)); + log.info("动力电池剩余电量SOC==:{}",remainingBattery); + vehicleData.setRemainingBattery(remainingBattery); + log.info("动力电池剩余电量SOC==:{}",vehicleData.getRemainingBattery()); + + //maximumFeedbackPower 当前状态允许的最大反馈功率 + String maximumFeedbackPower =str.substring(139,144); + log.info("当前状态允许的最大反馈功率==:{}",maximumFeedbackPower); + while (maximumFeedbackPower.endsWith("0")){ + maximumFeedbackPower=maximumFeedbackPower.substring(0,maximumFeedbackPower.length()-1); + } + vehicleData.setMaximumFeedbackPower(maximumFeedbackPower); + log.info("当前状态允许的最大反馈功率==:{}",vehicleData.getMaximumFeedbackPower()); + + //maximumDischargePower 当前状态允许最大放电功率 + String maximumDischargePower =str.substring(145,151); + log.info("当前状态允许最大放电功率:{}",maximumDischargePower); + while (maximumDischargePower.endsWith("0")){ + maximumDischargePower=maximumDischargePower.substring(0,maximumDischargePower.length()-1); + } + vehicleData.setMaximumDischargePower(maximumDischargePower); + log.info("当前状态允许最大放电功率:{}",vehicleData.getMaximumDischargePower()); + + //selfCheckCounter BMS自检计数器 + String selfCheckCounter =str.substring(151,153); + String selfCheckCounterReplace = selfCheckCounter.replace("0", ""); + log.info("BMS自检计数器==:{}",selfCheckCounter); + vehicleData.setSelfCheckCounter(selfCheckCounterReplace); + log.info("BMS自检计数器==:{}",vehicleData.getSelfCheckCounter()); + + //totalBatteryCurrent 动力电池充放电电流 + String totalBatteryCurrent =str.substring(153,158); + log.info("BMS自检计数器==:{}",totalBatteryCurrent); + while (totalBatteryCurrent.endsWith("0")){ + totalBatteryCurrent=totalBatteryCurrent.substring(0,totalBatteryCurrent.length()-1); + } + vehicleData.setTotalBatteryCurrent(totalBatteryCurrent); + log.info("BMS自检计数器==:{}",vehicleData.getTotalBatteryCurrent()); + + //totalBatteryVoltage 动力电池负载端总电压V3 + String totalBatteryVoltage =str.substring(158,164); + log.info("动力电池负载端总电压V3==:{}",totalBatteryVoltage); + while (totalBatteryVoltage.endsWith("0")){ + totalBatteryVoltage=totalBatteryVoltage.substring(0,totalBatteryVoltage.length()-1); + } + vehicleData.setTotalBatteryVoltage(totalBatteryVoltage); + log.info("动力电池负载端总电压V3==:{}",vehicleData.getTotalBatteryVoltage()); + + //singleBatteryMaxVoltage 单次最大电压 + String singleBatteryMaxVoltage =str.substring(164,168); + log.info("单次最大电压==:{}",singleBatteryMaxVoltage); + while (singleBatteryMaxVoltage.endsWith("0")){ + singleBatteryMaxVoltage=singleBatteryMaxVoltage.substring(0,singleBatteryMaxVoltage.length()-1); + } + vehicleData.setSingleBatteryMaxVoltage(singleBatteryMaxVoltage); + log.info("单次最大电压==:{}",vehicleData.getSingleBatteryMaxVoltage()); + + //singleBatteryMinVoltage 单体电池最低电压 + String singleBatteryMinVoltage =str.substring(168,172); + log.info("单体电池最低电压==:{}",singleBatteryMinVoltage); + while (singleBatteryMinVoltage.endsWith("0")){ + singleBatteryMinVoltage=singleBatteryMinVoltage.substring(0,singleBatteryMinVoltage.length()-1); + } + + vehicleData.setSingleBatteryMinVoltage(singleBatteryMinVoltage); + log.info("单体电池最低电压==:{}",vehicleData.getSingleBatteryMinVoltage()); + + //singleBatteryMaxTemperature 单体电池最高温度 + String singleBatteryMaxTemperature =str.substring(172,178); + log.info("单体电池最高温度==:{}",singleBatteryMaxTemperature); + while (singleBatteryMaxTemperature.endsWith("0")){ + singleBatteryMaxTemperature=singleBatteryMaxTemperature.substring(0,singleBatteryMaxTemperature.length()-1); + } + vehicleData.setSingleBatteryMaxTemperature(singleBatteryMaxTemperature); + log.info("单体电池最高温度==:{}",vehicleData.getSingleBatteryMaxTemperature()); + + //singleBatteryMinTemperature 单体电池最低温度 + String singleBatteryMinTemperature =str.substring(178,184); + log.info("单体电池最低温度==:{}",singleBatteryMinTemperature); + while (singleBatteryMinTemperature.endsWith("0")){ + singleBatteryMinTemperature=singleBatteryMinTemperature.substring(0,singleBatteryMinTemperature.length()-1); + } + vehicleData.setSingleBatteryMinTemperature(singleBatteryMinTemperature); + log.info("单体电池最低温度==:{}",vehicleData.getSingleBatteryMinTemperature()); + + //availableBatteryCapacity 可用电池容量 + String availableBatteryCapacity =str.substring(184,190); + log.info("可用电池容量==:{}",availableBatteryCapacity); + while (availableBatteryCapacity.endsWith("0")){ + availableBatteryCapacity=availableBatteryCapacity.substring(0,availableBatteryCapacity.length()-1); + } + vehicleData.setAvailableBatteryCapacity(availableBatteryCapacity); + log.info("可用电池容量==:{}",vehicleData.getAvailableBatteryCapacity()); + + //vehicleStatus 车辆状态 + int vehicleStatus = Integer.parseInt(str.substring(190,191)); + vehicleData.setVehicleStatus(vehicleStatus); + log.info("车辆状态==:{}",vehicleData.getVehicleStatus()); + + //chargingStatus 充电状态 + int chargingStatus = Integer.parseInt(str.substring(191,192)); + vehicleData.setChargingStatus(chargingStatus); + log.info("充电状态==:{}",vehicleData.getChargingStatus()); + + //operatingStatus 运行状态 + int operatingStatus = Integer.parseInt(str.substring(192,193)); + vehicleData.setOperatingStatus(operatingStatus); + log.info("运行状态==:{}",vehicleData.getOperatingStatus()); + + //socStatus SOC + int socStatus = Integer.parseInt(str.substring(193,194)); + vehicleData.setSocStatus(socStatus); + log.info("SOC==:{}",vehicleData.getSocStatus()); + + //chargingEnergyStorageStatus 可充电储能装置工作状态 + int chargingEnergyStorageStatus = Integer.parseInt(str.substring(194,195)); + vehicleData.setChargingEnergyStorageStatus(chargingEnergyStorageStatus); + log.info("可充电储能装置工作状态==:{}",vehicleData.getChargingEnergyStorageStatus()); + + //driveMotorStatus 驱动电机状态 + int driveMotorStatus = Integer.parseInt(str.substring(195,196)); + vehicleData.setDriveMotorStatus(driveMotorStatus); + log.info("驱动电机状态==:{}",vehicleData.getDriveMotorStatus()); + + //positionStatus 定位是否有效 + int positionStatus = Integer.parseInt(str.substring(196,197)); + vehicleData.setPositionStatus(positionStatus); + log.info("定位是否有效==:{}",vehicleData.getPositionStatus()); + + //easStatus EAS(汽车防盗系统)状态 + int easStatus = Integer.parseInt(str.substring(197,198)); + vehicleData.setEasStatus(easStatus); + log.info("EAS(汽车防盗系统)状态==:{}",vehicleData.getEasStatus()); + + //ptcStatus PTC(电动加热器)状态 + int ptcStatus = Integer.parseInt(str.substring(198,199)); + vehicleData.setPtcStatus(ptcStatus); + log.info("PTC(电动加热器)状态==:{}",vehicleData.getPtcStatus()); + + //epsStatus + int epsStatus = Integer.parseInt(str.substring(199,200)); + vehicleData.setEpsStatus(epsStatus); + log.info("车辆状态==:{}",vehicleData.getEpsStatus()); + + //absStatus EPS(电动助力系统)状态 + int absStatus = Integer.parseInt(str.substring(200,201)); + vehicleData.setAbsStatus(absStatus); + log.info("EPS(电动助力系统)状态==:{}",vehicleData.getAbsStatus()); + + //mcuStatus MCU(电机/逆变器)状态 + int mcuStatus = Integer.parseInt(str.substring(201,202)); + vehicleData.setMcuStatus(mcuStatus); + log.info("MCU(电机/逆变器)状态==:{}",vehicleData.getMcuStatus()); + + //heatingStatus 动力电池加热状态 + int heatingStatus = Integer.parseInt(str.substring(202,203)); + vehicleData.setHeatingStatus(heatingStatus); + log.info("动力电池加热状态==:{}",vehicleData.getHeatingStatus()); + + //batteryStatus 动力电池当前状态 + int batteryStatus = Integer.parseInt(str.substring(203,204)); + vehicleData.setBatteryStatus(batteryStatus); + log.info("动力电池当前状态==:{}",vehicleData.getBatteryStatus()); + + //batteryInsulationStatus 动力电池保温状态 + int batteryInsulationStatus = Integer.parseInt(str.substring(204,205)); + vehicleData.setBatteryInsulationStatus(batteryInsulationStatus); + log.info("动力电池保温状态==:{}",vehicleData.getBatteryInsulationStatus()); + + //dcdcStatus DCDC(电力交换系统)状态 + int dcdcStatus = Integer.parseInt(str.substring(205,206)); + vehicleData.setDcdcStatus(dcdcStatus); + log.info("DCDC(电力交换系统)状态==:{}",vehicleData.getDcdcStatus()); + + //chgStatus CHG(充电机)状态 + int chgStatus = Integer.parseInt(str.substring(206,207)); + vehicleData.setChgStatus(chgStatus); + log.info("CHG(充电机)状态 ==:{}",vehicleData.getChgStatus()); + + log.info("车辆数据解析完成:{}",vehicleData); + + vehicleDataList.add(vehicleData); + + return vehicleDataList; + } +} diff --git a/zhilian-modules/zhilian-resolver/src/main/resources/bootstrap.yml b/zhilian-modules/zhilian-resolver/src/main/resources/bootstrap.yml index a4a540d..930724a 100644 --- a/zhilian-modules/zhilian-resolver/src/main/resources/bootstrap.yml +++ b/zhilian-modules/zhilian-resolver/src/main/resources/bootstrap.yml @@ -19,9 +19,11 @@ spring: discovery: # 服务注册地址 server-addr: 10.10.25.2:8848 + namespace: 9d9e22dc-ff70-42c5-adac-fa69e6d62dbe config: # 配置中心地址 server-addr: 10.10.25.2:8848 + namespace: 9d9e22dc-ff70-42c5-adac-fa69e6d62dbe # 配置文件格式 file-extension: yml # 共享配置