1.MQTT是什么?
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
2.代码实现
先引入jar包
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.0</version>
</dependency>
<!-- 引入另一种mqtt的client -->
<dependency>
<groupId>org.fusesource.mqtt-client</groupId>
<artifactId>mqtt-client</artifactId>
<version>1.14</version>
</dependency>
本例子使用第二个依赖实现的
/**
* @Auther: 18030501
* @Date: 2018/10/25 17:15
* @Description: 发布端/接收端
*/
@Slf4j
public class PublishAndSubscribeClient {
// mqtt服务
public static String HOST = "tcp://host:port";
// 客户端id
public static String CLIENT_ID = "test_clientId";
// 用户名
public static String USERNAME = "whale";
// 密码
public static String PASSWORD = "123456";
// 客户端与服务端消息传递的最大间隔。它能够使服务器检测到客户端的网络是否已经丢失,而无需等待TCP/IP超时
public static short KEEP_ALIVE = 20;
public static void main(String[] args) throws Exception {
// 配置MQTT连接
MQTT mqtt = new MQTT();
mqtt.setHost(HOST);
mqtt.setClientId(CLIENT_ID);
mqtt.setUserName(USERNAME);
mqtt.setPassword(PASSWORD);
// 是否清除session,false:MQTT服务器保存于客户端会话的的主题与确认位置,true:MQTT服务器不保存于客户端