一、什么是mqtt协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

二、添加相关依赖包

        <!--mqtt依赖包--><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-mqtt</artifactId></dependency><dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-stream</artifactId></dependency>

三、配置文件

iot.mqtt.clientId=client
iot.mqtt.defaultTopic=mqtt_topic
iot.mqtt.serverClientId=server
iot.mqtt.servers=tcp://127.0.0.1:1883
iot.mqtt.username=admin
iot.mqtt.password=password

四、代码实现

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.stereotype.Component;/*** 其他的中间件* Mosquitto* Eclipse Paho* RabbitMQ* Apache ActiveMQ* HiveMQ* JoramMQ* ThingMQ* VerneMQ* Apache Apollo* emqttd Xively* IBM Websphere*/
@Data
@Component
@IntegrationComponentScan
@ConfigurationProperties(prefix = "iot.mqtt")
public class MqttConfig {/*** 服务地址*/private String servers;/*** 客户端id*/private String clientId;/*** 服务端id*/private String serverClientId;/*** 默认主题*/private String defaultTopic;/*** 账号*/private String username;/*** 密码*/private String password;
}
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;@MessagingGateway(defaultRequestChannel = "iotMqttInputChannel")
public interface IotMqttGateway {void sendMessage2Mqtt(String data);void sendMessage2Mqtt(String data, @Header(MqttHeaders.TOPIC) String topic);void sendMessage2Mqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);
}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;@Controller
@RequestMapping("/mqtt")
public class IotMqttController {@Resourceprivate IotMqttGateway iotMqttGateway;@RequestMapping("/send")@ResponseBodypublic String sendMqtt(@RequestParam(value = "topic") String topic, @RequestParam(value = "message") String message) {iotMqttGateway.sendMessage2Mqtt(message);return "SUCCESS";}
}
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;@Configuration
@IntegrationComponentScan
public class IotMqttProducerConfig {@Value("${iot.mqtt.username}")private String username;@Value("${iot.mqtt.password}")private String password;@Value("${iot.mqtt.servers}")private String hostUrl;@Value("${iot.mqtt.clientId}")private String clientId;@Value("${iot.mqtt.defaultTopic}")private String defaultTopic;@Autowiredprivate MqttConfig mqttConfig;@Beanpublic MqttConnectOptions getMqttConnectOptions(){MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();mqttConnectOptions.setUserName(username);mqttConnectOptions.setPassword(password.toCharArray());mqttConnectOptions.setServerURIs(new String[]{hostUrl});mqttConnectOptions.setKeepAliveInterval(2);return mqttConnectOptions;}@Beanpublic MqttPahoClientFactory mqttClientFactory() {DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();factory.setConnectionOptions(getMqttConnectOptions());return factory;}@Beanpublic MessageChannel iotMqttInputChannel() {return new DirectChannel();}@Bean@ServiceActivator(inputChannel = "iotMqttInputChannel")public MessageHandler mqttOutbound() {MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(mqttConfig.getServerClientId(), mqttClientFactory());messageHandler.setAsync(false);messageHandler.setDefaultQos(2);messageHandler.setDefaultTopic(mqttConfig.getDefaultTopic());return messageHandler;}
}
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import org.springframework.messaging.MessagingException;@Slf4j
@Configuration
@IntegrationComponentScan
public class IotMqttSubscriberConfig {@Value("${iot.mqtt.username}")private String username;@Value("${iot.mqtt.password}")private String password;@Value("${iot.mqtt.servers}")private String hostUrl;@Value("${iot.mqtt.clientId}")private String clientId;@Value("${iot.mqtt.defaultTopic}")private String defaultTopic;@Autowiredprivate MqttConfig mqttConfig;@Beanpublic MqttConnectOptions getMqttConnectOptions(){MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();mqttConnectOptions.setUserName(username);mqttConnectOptions.setPassword(password.toCharArray());mqttConnectOptions.setServerURIs(new String[]{hostUrl});mqttConnectOptions.setKeepAliveInterval(2);return mqttConnectOptions;}@Beanpublic MqttPahoClientFactory mqttClientFactory() {DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();factory.setConnectionOptions(getMqttConnectOptions());return factory;}@Beanpublic MessageChannel iotMqttInputChannel() {return new DirectChannel();}@Beanpublic MessageProducer inbound() {MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(mqttConfig.getClientId(), mqttClientFactory(), mqttConfig.getDefaultTopic());adapter.setCompletionTimeout(5000);adapter.setConverter(new DefaultPahoMessageConverter());adapter.setQos(2);adapter.setOutputChannel(iotMqttInputChannel());return adapter;}@Bean@ServiceActivator(inputChannel = "iotMqttInputChannel")public MessageHandler handlerTest() {return message -> {try {String string = message.getPayload().toString();System.out.println("接收到消息:" + string);} catch (MessagingException e) {log.info(e.getMessage());}};}
}
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;public class CallBacks implements MqttCallback {@Overridepublic void connectionLost(Throwable throwable) {System.out.println(throwable);}@Overridepublic void messageArrived(String s, MqttMessage mqttMessage) {System.out.println("消息接收" + s + mqttMessage);}@Overridepublic void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {}
}

rabbitmq和springboot实现智能家居远程控制相关推荐

  1. ansole终端链接linux,基于Linux系统的智能家居远程控制系统设计论文.doc

    基于Linux系统的智能家居远程控制系统设计论文 学科分类号 0801 北京邮电大学毕业论文 题目 (中文):基于Linux系统的智能家居远程控制系统设计 (英文):The smart home re ...

  2. 锐界机器人_2019款锐界智能家居远程控制使用介绍

    2019款 经过场地的绕圈测试,传祺GA6的制动系统依旧保持良好的响应速度,而且制动力输出没有虚位,从踩上制动踏板初段就能得到明显的制动力反馈. 车头重量给前脸极大的压力,不过在极限过弯的情况下,悬架 ...

  3. 基于linux智能家居系统设计,基于linux系统的智能家居远程控制系统设计毕业设计论文.doc...

    本科学生毕业论文(设计) 题目 (中文):基于linux系统的智能家居远程控制系统设计 (英文):The smart home remote control system based on Linux ...

  4. 智能家居简单实现---使用ESP8266简单实现和APP通讯

    前段时间,公司利用 ESP8266 这个WiFi模块,做了好多小产品.从手机 APP 直连这个 ESP8266 进行通讯,再到实现远程控制.中间实现过程磕磕碰碰,虽然这方面已经做得非常成熟,但是网上的 ...

  5. 手机控制远程linux,远程控制系统如何控制智能家居的?

    原标题:远程控制系统如何控制智能家居的? 智能家居现今越来越多人感觉兴趣,并在家里安装了智能家居,而智能家居中的远程控制系统主要的作用的是什么,可以控制哪些智能家居呢? 智能家居远程控制系统理论上是用 ...

  6. 基于IOT技术的智能家居系统应用研究

    摘要:阐述了IOT(物联网)技术在现代智能家居系统中的应用,以基于微信聊天机器人.面向自闭症儿童.住宅项目健康及节能的智能家居系统为例进行研究,分析了基于IOT技术的智能家居系统与社会实际生活相结合的 ...

  7. 智能家居设计原理c语言,智能家居设计八大经典电路(附原理图、源代码、视频)...

    作为一个汽车电子专业工作7年的"老"人,跨行做了智能家居设计,一切都是从零做起.在我学习.设计智能家居的过程中,发现了这行还是有不少好的设计方案可以借鉴.现在就把我认为很价值的方案 ...

  8. 我也没想到 springboot + rabbitmq 做智能家居,会这么简单

    前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇. 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值, ...

  9. SpringBoot +RabbitMQ 做智能家居,居然如此简单!

    前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇. 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值, ...

最新文章

  1. WebService简单开发 apache-cxf-3.1.6环境配置
  2. python 400集大型视频下载_Python400集大型视频,无偿分享,从正确方向学习python...
  3. arm 架构_Arm架构之Arm内核解析
  4. .net mvc 一个Action的 HttpGet 和 HttpPost
  5. 在mysql上发布jbpm4.3
  6. Android USB打印机
  7. 微信自动回复 html 点击文字,常见微信自动回复经典语录
  8. 关于人工智能研究思路的一点设想
  9. (求助)RPC failed;curl 56 GnuTLS recv error(-9): A TLS packet with unexpected length was received
  10. DRM驱动(二)之DRM驱动模块简介
  11. gnuplot:散点图
  12. STM32单片机TTS温度播报系统 DS18B20 LCD1602
  13. 在VS Code中开发ESP32遇到如下IDF_PATH环境变量不一致的警告问题
  14. ps考试引擎安装溢出屏幕
  15. This application is currently offline解决办法
  16. 用python实现csdn博主全部博文下载,html转pdf,有了学习的电子书了。。。(附源码)
  17. LM334芯片到底是恒流源还是温度传感器?
  18. 改善到底多大 FXAA画质游戏实测
  19. vue element upload组件 file-list的动态绑定
  20. 车载以太网100base-T1

热门文章

  1. 集合类对象的遍历处理办法
  2. ovs hot upgrade
  3. 资讯_Windows7旗舰版官方原装镜像iso文件下载;
  4. MetaWork:拜托,这样远程结对编程超酷的
  5. 带视频的sip网络电话机
  6. if单选择结构_掷骰子游戏
  7. 页面居中、响应式布局的总结
  8. 第一次接触动态规划的心得和感悟
  9. 数据结构-树及其概念
  10. 什么是主服务协议MSA - Master Service Agreement