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); + } +} +