Mqtt在Java的使用及相关常用api

Mqtt在Java的使用及相关常用api

  • 一级目录
    • 二级目录
      • 三级目录
    • MQTT小计
      • 相关方法
        • MqttClient构造方法
        • 连接信息的构造方法
        • 将连接信息放入MqttClient
        • 订阅信息
        • 取消订阅
        • 发布信息
        • 断开连接
        • 关闭客户端

一级目录

二级目录

三级目录

MQTT小计

相关方法

MqttClient构造方法

MqttClient sampleClient = new MqttClient(broker, clientId, new MemoryPersistence())// 创建客户端
  • broker:代理的地址,一般是启动的代理机的Ip+端口(1883)
  • clientId:MqttClient的唯一标识,不同的MqttClient需要不同的MqttClient
  • new MemoryPersistence():固定参数,直接new即可。

连接信息的构造方法

MqttConnectOptions connOpts = new MqttConnectOptions(); // 创建链接参数

可设置的属性:

  • // 在重新启动和重新连接时记住状态
    connOpts.setCleanSession(false);
    // 设置连接的用户名
    connOpts.setUserName(userName);  
    // 设置连接的密码
    connOpts.setPassword(password.toCharArray());
    // 超时时间 单位为秒
    connOpts.setConnectionTimeout(10);  
    // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
    connOpts.setKeepAliveInterval(20);
    

将连接信息放入MqttClient

sampleClient.connect(connOpts); // 建立连接

订阅信息

在设置后连接信息后,可以直接调用MqttClient中的subscribe对主题进行订阅:

// 第一个参数是订阅的主题,第二个参数是QOS,消息的质量
subscribe.subscribe("myroom/#",2);

关于订阅主题:

  • 通配符

    • #表示可以通配多层的结构主题(d/#可以收到d/abcd/abc/efg

    • +表示只能通配一层的结构主题(a/+/b通配a/c/ba/d/b

  • 阻塞

    • 在执行完订阅的函数后,会造成线程阻塞,一直处于等待消息推送的状态。
  • 信息读取

    • 订阅后消息的读取通过回调函数来进行获取
    // 设置回调函数
    client.setCallback(new MqttCallback() {
            
        // 客户端掉线走这条
     public void connectionLost(Throwable cause) {
           
        		  System.out.println("connectionLost");
        			 cause.printStackTrace();
                    }
    
        // 收到消息推送走这条
      public void messageArrived(String topic, MqttMessage message) throws SQLException, MqttException {
           
               String content = new String(message.getPayload());
                        System.out.println("topic:"+topic);
                        System.out.println("Qos:"+message.getQos());
                        System.out.println("收到的消息:"+content);
                    }
    
        public void deliveryComplete(IMqttDeliveryToken token) {
           
                        System.out.println("deliveryComplete---------"+ token.isComplete());
                    }
                });
    

取消订阅

通过MqttClient的对象可以直接取消曾经的订阅

// topic为要取消订阅的主题
sampleClient.unsubscribe(topic);

MQTT在取消订阅后还是会处于阻塞状态,除非断开连接。

发布信息

MqttMessage message = new MqttMessage(next.getBytes());  // 创建消息
message.setQos(qos);   // 设置消息的服务质量
sampleClient.publish(topic, message);  // 发布消息

断开连接

sampleClient.disconnect(); // 断开连接

关闭客户端

sampleClient.close(); // 关闭客户端

你可能感兴趣的:(其他,java,网络通信)