赞
踩
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色VX号,加VX好友,拉你进【程序员面试学习交流群】免费领取。也欢迎各位一起在群里探讨技术。
推荐文章:Java 面试知识点解析;Mysql优化技巧(数据库设计、命名规范、索引优化
上次已经简单的谈了一些MQTT协议的一些知识,今天就来就上次的知识具体的Java实现。
现在就来具体说说实现这一步吧。中间的时间也是有点久。
MQTT消息的发送和订阅都是依赖MQTT服务器的,没有MQTT服务器,你的客户端是无法订阅和发送消息的。所以在最开始的时候,可以选择性的在你的电脑上面安装一个MQTT服务器。MQTT服务器有很多,大家也可以在网上去找一些安装教程,这里因为和我要讲内容关系不大,所以不再累述。
MQTT协议中是没有发送者和接收者·的概念,所有的连接都是用户,所以一个MQTT连接既可以发送消息,也可以接收消息。就等于所有的连接都是客户端。下面我的客户端代码也是如此,因为公司这边接收的信息先是要进行认证,认证成功后再接收有用的信息。这时,客户端在根据设备的信息来控制网关上面的设备,达到远程控制设备的目的。因为要使用服务器来转发消息,所以对于服务器的测试也是比较重要的,但是我使用的是公司的服务器,所以这一块我的了解比较少。但是我这边有一些工具,谷歌浏览器的插件MQTTLens。可能会帮助你。(需要翻阅墙体)
MQTT使用的库也是有很多的,下面的网址也是列举了MQTT支持的库,有java的,也有c的。网址如下:https://github.com/mqtt/mqtt.github.io/wiki/libraries。因为最开始我的接触还是比较浅,使用的是:Fusesource mqtt-client。所以java的demo也是基于这个库的,但是后来和spring整合的时候发现有一些问题,因为spring支持的只有一个库,就是Eclipse Paho Java。但是原理都是一样的,大家可以自己去决定,我的简单的demo代码还是基于Fusesource mqtt-client。在下一篇Spring和MQTT整合中使用的是Eclipse Paho Java。
下面就说一说具体的思路,这边我的代码是基于公司的网关需求,所以先说一说公司网关的具体流程。首先,网关会一直发送身份验证消息,等待客户端认证,客户端认证通过后,会发送具体有用的信息。客户端这时在根据网关信息发送控制命令,到达控制的目的。在这个过程中,客户端有订阅和发送,所以一个客户端就练习了发送消息和订阅消息。这就是公司的具体操作流程。下面就说一说代码的流程。
运行时要使用jar包,也可使用maven,但是使用maven时要注意版本。
具体的jar包和maven依赖在网址:https://gitee.com/iots/mqtt-client
依赖为:
- <dependency>
-
- <groupId>org.fusesource.mqtt-client</groupId>
-
- <artifactId>mqtt-client</artifactId>
-
- <version>1.12</version>
-
- </dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.12</version>
</dependency>
下面开始编写demo
首先先要配置MQTT的一些配置,配置比较多,也很繁琐。
主要是配置主机号和端口号,根据自己的配置编写代码,在配置其他的一些细节配置,主要是和连接有关的。
代码如下:
// MQTT设置说明 // 设置主机号 mqtt.setHost("服务器地址和端口号"); // 用于设置客户端会话的ID。在setCleanSession(false);被调用时,MQTT服务器利用该ID获得相应的会话。此ID应少于23个字符,默认根据本机地址、端口和时间自动生成 mqtt.setClientId("876543210"); // 若设为false,MQTT服务器将持久化客户端会话的主体订阅和ACK位置,默认为true mqtt.setCleanSession(false); // 定义客户端传来消息的最大时间间隔秒数,服务器可以据此判断与客户端的连接是否已经断开,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。