MQTT简单demo(java),java高级面试笔试题

本文介绍了在Java中实现MQTT协议的简单demo,包括配置、连接、订阅和发送主题。通过三种不同的API(阻塞、Future和回调)演示了连接MQTT服务器的方法,并分享了在实际项目中遇到的问题和解决思路。
摘要由CSDN通过智能技术生成


我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家。
扫描二维码或搜索下图红色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);

        // 定义客户端传来消息的最大时间间隔秒数,服务器可以据此判断与客户端的连接是否已经断开,
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个简单MQTT Java Demo可以通过使用Eclipse Paho客户端库来实现。首先,你需要下载并导入Paho库,然后在你的Java项目中使用以下代码创建一个MQTT客户端: ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MqttDemo { public static void main(String[] args) { String broker = "tcp://iot.eclipse.org:1883"; String clientId = "JavaClient"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient client = new MqttClient(broker, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); client.connect(connOpts); System.out.println("Connected to " + broker); String topic = "topic/demo"; int qos = 1; client.subscribe(topic, qos); String content = "Hello, MQTT!"; client.publish(topic, content.getBytes(), qos, false); System.out.println("Message published"); client.disconnect(); System.out.println("Disconnected"); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); } } } ``` 在这个Demo中,我们创建了一个MqttClient实例并连接到一个MQTT代理。然后,我们订阅了一个名为"topic/demo"的主,并向该主发布了一条消息"Hello, MQTT!"。最后,我们断开了与代理的连接。这个Demo演示了如何使用Java语言来实现MQTT客户端,并进行连接、订阅和发布消息的操作。希望这能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值