Просмотр исходного кода

撤回service-cdi模块部分修改

hanzhengyi 5 дней назад
Родитель
Сommit
1f778c0083

+ 2 - 15
service-cdi/service-cdi-biz/src/main/java/com/usky/cdi/service/config/mqtt/MqttBaseConfig.java

@@ -2,46 +2,33 @@ package com.usky.cdi.service.config.mqtt;
 
 import lombok.Data;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
 import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
 import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
-import org.springframework.stereotype.Component;
 
-@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
 @Data
-@Component
 public class MqttBaseConfig {
 
-    @Value("${mqtt.username}")
     private String username;
 
-    @Value("${mqtt.password}")
     private String password;
 
-    @Value("${mqtt.url}")
     private String hostUrl;
 
-    @Value("${mqtt.sub-topics:}")
     private String msgTopic;
 
     //心跳间隔
-    @Value("${mqtt.keep-alive-interval:60}")
     private int keepAliveInterval;
-    
+
     //完成超时
-    @Value("${mqtt.completionTimeout:3000}")
     private int completionTimeout;
 
 
-    @Bean
     public MqttPahoClientFactory mqttClientFactory() {
         DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
         MqttConnectOptions options = new MqttConnectOptions();
         options.setServerURIs(new String[]{this.getHostUrl()});
         options.setUserName(this.getUsername());
-        if (this.getPassword() != null && !this.getPassword().isEmpty()) {
+        if (this.getPassword() != null) {
             options.setPassword(this.getPassword().toCharArray());
         }
         options.setKeepAliveInterval(this.getKeepAliveInterval());

+ 32 - 6
service-cdi/service-cdi-biz/src/main/java/com/usky/cdi/service/config/mqtt/MqttOutConfig.java

@@ -1,11 +1,11 @@
 package com.usky.cdi.service.config.mqtt;
 
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.springframework.context.annotation.Bean;
 import org.springframework.integration.annotation.MessagingGateway;
 import org.springframework.integration.annotation.ServiceActivator;
 import org.springframework.integration.channel.DirectChannel;
-import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
+import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
 import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
 import org.springframework.integration.mqtt.support.MqttHeaders;
 import org.springframework.messaging.MessageChannel;
@@ -19,9 +19,9 @@ import java.util.Map;
  * @author han
  * @date 2025/03/20 14:31
  */
-@ConditionalOnProperty(prefix = "mqtt", value = {"enabled"}, havingValue = "true")
 @Component
 public class MqttOutConfig {
+    public MqttBaseConfig mqttBaseConfig;
 
     public static final String CHANNEL_NAME_OUT = "mqttOutboundChannel";
 
@@ -49,15 +49,41 @@ public class MqttOutConfig {
      */
     @Bean(name = MESSAGE_NAME)
     @ServiceActivator(inputChannel = CHANNEL_NAME_OUT)
-    public MessageHandler outbound(MqttPahoClientFactory factory) {
-        String clientId = "mqttx-out-" + System.currentTimeMillis();
+    public MessageHandler outbound(DefaultMqttPahoClientFactory factory) {
+        // 注意:这里的client-id暂时使用固定值,因为username在启动时还不可用
+        // 实际使用时,会在createMqttConnection方法中重新设置
+        String clientId = "mqttx-" + System.currentTimeMillis();
         MqttPahoMessageHandler messageHandler =
                 new MqttPahoMessageHandler(clientId, factory);
+        // 如果设置成true,发送消息时将不会阻塞。
         messageHandler.setAsync(true);
         messageHandler.setDefaultTopic(DEFAULT_TOPIC);
         return messageHandler;
     }
 
+    /**
+     * MQTT客户端工厂
+     * 注意:这个方法会被Spring自动创建,用于创建MQTT客户端
+     *
+     * @return DefaultMqttPahoClientFactory实例
+     */
+    @Bean
+    public DefaultMqttPahoClientFactory mqttClientFactory() {
+        // 创建默认的MqttPahoClientFactory
+        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
+
+        // 设置默认的MqttConnectOptions,确保serverURIs不为null
+        // 使用时,会在createMqttConnection方法中重新配置
+        MqttConnectOptions options = new MqttConnectOptions();
+        // 设置默认的服务器地址
+        options.setServerURIs(new String[]{"ssl://114.80.201.143:8883"});
+        // 设置默认的心跳间隔
+        options.setKeepAliveInterval(60);
+        factory.setConnectionOptions(options);
+
+        return factory;
+    }
+
     // 注意:这个接口需要被Spring扫描到,所以我们保留@MessagingGateway注解
     // Spring会自动创建这个接口的实现类
     @MessagingGateway(defaultRequestChannel = CHANNEL_NAME_OUT)
@@ -94,4 +120,4 @@ public class MqttOutConfig {
          */
         void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);
     }
-}
+}

+ 9 - 13
service-cdi/service-cdi-biz/src/main/java/com/usky/cdi/service/util/WeatherFetcher.java

@@ -1,8 +1,5 @@
 package com.usky.cdi.service.util;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.*;
@@ -12,6 +9,7 @@ import java.net.HttpURLConnection;
 import java.net.URL;
 
 import lombok.extern.slf4j.Slf4j;
+import org.json.JSONObject;
 
 /**
  * 天气数据获取工具类
@@ -97,14 +95,14 @@ public class WeatherFetcher {
                 }
                 reader.close();
 
-                // 4. 解析JSON数据
-                JSONObject jsonResponse = JSON.parseObject(response.toString());
+                // 4. 解析JSON数据(使用org.json库)
+                JSONObject jsonResponse = new JSONObject(response.toString());
                 JSONObject main = jsonResponse.getJSONObject("main");
 
                 // 注意:温度默认是开尔文单位,转换为摄氏度需要 -273.15
                 double tempKelvin = main.getDouble("temp");
                 tempCelsius = tempKelvin - 273.15;
-                humidity = main.getInteger("humidity");
+                humidity = main.getInt("humidity");
                 double feelsLikeKelvin = main.getDouble("feels_like");
                 double feelsLikeCelsius = feelsLikeKelvin - 273.15;
 
@@ -115,16 +113,14 @@ public class WeatherFetcher {
                 // 记录日志
                 log.info("=== 天气解析结果 ===");
                 log.info("城市: {}", jsonResponse.getString("name"));
-                log.info("温度: {}°C (原始: {}K)", String.format("%.2f", tempCelsius), tempKelvin);
-                log.info("体感温度: {}°C", String.format("%.2f", feelsLikeCelsius));
+                log.info("温度: {:.2f}°C (原始: {}K)", tempCelsius, tempKelvin);
+                log.info("体感温度: {:.2f}°C", feelsLikeCelsius);
                 log.info("湿度: {}%", humidity);
                 log.info("天气状况: {}", description);
-                log.info("时区偏移: {}小时", (jsonResponse.getIntValue("timezone") / 3600));
+                log.info("时区偏移: {}小时", (jsonResponse.getInt("timezone") / 3600));
 
                 // 检查是否包含臭氧数据
-                if (jsonResponse.containsKey("air_quality")
-                        || jsonResponse.containsKey("o3")
-                        || jsonResponse.containsKey("components")) {
+                if (jsonResponse.has("air_quality") || jsonResponse.has("o3") || jsonResponse.has("components")) {
                     log.info("包含空气质量数据");
                 } else {
                     log.info("当前数据不包含臭氧浓度等空气质量指标");
@@ -174,4 +170,4 @@ public class WeatherFetcher {
     public static void main(String[] args) {
         fetchWeather();
     }
-}
+}