java mqtt

作者:原创时间:2022-04-06
文档

java mqtt是什么,让我们一起了解一下?

MQTT是一个基于客户端-服务器的消息发布或订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,如果工作在TCP或IP协议上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布或订阅型的消息协议。

MQTT主要应用在哪些场合?

1、它是一种机器之间通讯 machine-to-machine (M2M)、物联网 Internet of Things (IoT)常用的一种轻量级消息传输协议。

2、适用于网络带宽较低的场合。

3、包含发布、订阅模式,通过一个代理服务器(broker),任何一个客户端(client)都可以订阅或者发布某个主题的消息,然后订阅了该主题的客户端则会收到该消息。

实战操作:模拟客户端接收消息。

import java.util.concurrent.ScheduledExecutorService;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
 
/**
 * 模拟一个客户端接收消息
 *
 * @author Unclue_liu
 */
public class ClientMQTT {
 
    public static final String HOST = "tcp://192.168.1.77:1883";
    public static final String TOPIC1 = "pos_message_all";
    private static final String clientid = "12345678";
    private MqttClient client;
    private MqttConnectOptions options;
    private String userName = "mqtt";    //非必须
    private String passWord = "mqtt";  //非必须
    private ScheduledExecutorService scheduler;
 
    private void start() {
        try {
            // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
            client = new MqttClient(HOST, clientid, new MemoryPersistence());
            // MQTT的连接设置
            options = new MqttConnectOptions();
            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
            options.setCleanSession(false);
            // 设置连接的用户名
            options.setUserName(userName);
            // 设置连接的密码
            options.setPassword(passWord.toCharArray());
            // 设置超时时间 单位为秒
            options.setConnectionTimeout(10);
            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
            options.setKeepAliveInterval(20);
            //设置断开后重新连接
            options.setAutomaticReconnect(true);
            // 设置回调
            client.setCallback(new PushCallback());
            MqttTopic topic = client.getTopic(TOPIC1);
            //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
            //遗嘱
            options.setWill(topic, "close".getBytes(), 1, true);
            client.connect(options);
            //订阅消息
            int[] Qos = {1};//0:最多一次 、1:最少一次 、2:只有一次
            String[] topic1 = {TOPIC1};
            client.subscribe(topic1, Qos);
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args)  {
        ClientMQTT client = new ClientMQTT();
        client.start();
 
    }

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java multiset java mvvm java mybatisplus java namespace java newinstance java nextint java nextline java nexus java nfs java geotools java getbytes java hashcode java hdfs java node类 java notify java nslookup java number java hibernate java htmlunit java image java mono java monad java module java modelandview java mockito java mmap java mkdir java mina java mian java method java merge java memcpy java matrix java matlab java math.ceil java mapping java malloc java main java logstash java logging