diff --git a/xymanager_admin/src/main/resources/application-test.yml b/xymanager_admin/src/main/resources/application-test.yml
index a64301d..a2f15d7 100644
--- a/xymanager_admin/src/main/resources/application-test.yml
+++ b/xymanager_admin/src/main/resources/application-test.yml
@@ -119,3 +119,10 @@ rsa:
public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCViq0L+1XCTKOkt9nmy9aQbMRNNJNBOtPYRlCq/bRuwlYaq/I+XqSDkIF8s4JJSy3/Vgjw0fp8d4O+5KBS4Om9Ela60I2Vv/q8LjCNFNYbRE6xI7yrlyPukodmC/s1VgODDRHn3vVyKcK9nyF7xZsXixnlvltAky888CJkLpiGjQIDAQAB
private_key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJWKrQv7VcJMo6S32ebL1pBsxE00k0E609hGUKr9tG7CVhqr8j5epIOQgXyzgklLLf9WCPDR+nx3g77koFLg6b0SVrrQjZW/+rwuMI0U1htETrEjvKuXI+6Sh2YL+zVWA4MNEefe9XIpwr2fIXvFmxeLGeW+W0CTLzzwImQumIaNAgMBAAECgYAzOn2LlD9Nv5lzzTPNl9jaQxiAZllnyDJYbcYmvaD5LIP4wRzMdvmexHtHb+tbFnEcfqmzbguEZiDw3Tt7COepQWvNzlM+/HbFtkXzSh6WEu2TgjZwudcCDHDyjDzUNgcWnBIw8/+Sy4COOm4p+UnprYK4sdriMZyz8K5UC8CxFQJBAODTt0lg/HiZKaOX7PMmsiRisd5oAslyDHCt66oPG29KTE1j4fwKDzGJlrOo1f4Q078IDYMO1I/Y3uP8Es3FT1MCQQCqRrD+lO3YCZOUGTHm2WGmbljIoeDpnIn2TZFyqDGKXs6EAx7SXkgarY2OC5O2aifMhXElPUGChfSgPmRUFHafAkEAxFtkWuwf1NxAJ6cKxZpoP6sLGenRdUrsXoUnrBEhruM/HOA9gLjwaB14x1SQASOFK/TGiE4ti6ynjoqbiafoDQJBAI0l6FZAsiBhX9pmQD1yeUXzNtmphr1gK+TmS+lVjyt6h4pa49PSn8atkyfqZNnTiYY6H56U9pbx3+Rtk9E23VUCQEZ9/JHUaGc77s3ibpcKFVemlb0i/Uvj2V45aoNfY34iex4biAUsRq/FJNiqBk+xQWkJ4QY8nKVE45GlaCfZ8/c=
+mqtt:
+ clientId: xymp_client
+ broker: tcp://61.169.135.146:51001
+ username: xymp
+ password: xymp
+ cmdtopic: /v1/devices/MSRDT-A/command
+ datatopic: /v1/devices/MSRDT-A/datas
\ No newline at end of file
diff --git a/xymanager_framework/pom.xml b/xymanager_framework/pom.xml
index df2a11c..d73eea5 100644
--- a/xymanager_framework/pom.xml
+++ b/xymanager_framework/pom.xml
@@ -62,6 +62,13 @@
true
+
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.2.5
+
+
org.springframework.boot
diff --git a/xymanager_framework/src/main/java/com/shxy/xymanager_framework/config/MqttConfig.java b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/config/MqttConfig.java
new file mode 100644
index 0000000..228c467
--- /dev/null
+++ b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/config/MqttConfig.java
@@ -0,0 +1,43 @@
+package com.shxy.xymanager_framework.config;
+
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MqttConfig {
+
+ @Value("${mqtt.broker}")
+ private String broker;
+
+ @Value("${mqtt.clientId}")
+ private String clientId;
+
+ @Value("${mqtt.username}")
+ private String username;
+
+ @Value("${mqtt.password}")
+ private String password;
+
+ @Bean
+ public MqttConnectOptions mqttConnectOptions() {
+ MqttConnectOptions options = new MqttConnectOptions();
+ options.setServerURIs(new String[]{broker});
+ options.setUserName(username);
+ options.setPassword(password.toCharArray());
+ options.setAutomaticReconnect(true);
+ options.setCleanSession(true);
+ return options;
+ }
+
+ @Bean
+ public MqttClient mqttClient(MqttConnectOptions options) throws MqttException {
+ MqttClient client = new MqttClient(broker, clientId);
+ client.connect(options);
+ return client;
+ }
+}
+
diff --git a/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttPublisherService.java b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttPublisherService.java
new file mode 100644
index 0000000..4016ed1
--- /dev/null
+++ b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttPublisherService.java
@@ -0,0 +1,26 @@
+package com.shxy.xymanager_framework.mqtt;
+
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class MqttPublisherService {
+
+ @Value("${mqtt.cmdtopic}")
+ private String cmdtopic;
+
+ @Resource
+ private MqttClient mqttClient;
+
+ public void publish(String payload) throws Exception {
+ MqttMessage message = new MqttMessage(payload.getBytes());
+ message.setQos(1);
+ message.setRetained(true);
+ mqttClient.publish(cmdtopic, message);
+ }
+}
+
diff --git a/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttSubscriber.java b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttSubscriber.java
new file mode 100644
index 0000000..bfe0617
--- /dev/null
+++ b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/mqtt/MqttSubscriber.java
@@ -0,0 +1,35 @@
+package com.shxy.xymanager_framework.mqtt;
+
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+@Service
+@Slf4j
+public class MqttSubscriber implements IMqttMessageListener {
+
+ @Autowired
+ private MqttClient mqttClient;
+
+ @Value("${mqtt.datatopic}")
+ private String datatopic;
+
+ @PostConstruct
+ public void init() throws Exception {
+ // 订阅默认主题
+ mqttClient.subscribe(datatopic, this);
+ }
+
+ @Override
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
+ String payload = new String(message.getPayload());
+ log.info("Received message [%s]: %s%n", topic, payload);
+ }
+}
+