当前位置:首页 > Windows程序 > 正文

MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用

2021-05-24 Windows程序

参看官方文档:

?topic=http://www.mamicode.com/com.ibm.mq.amqtat.doc/tt00000_.htm

*  Java 为 MQ Telemetry Transport 创建异步发布程序
 *在此任务中,您将遵循教程来修改第一个发布程序。通过修改,
 *使应用程序能够发送发布而不等待传递确认信息。传递确认
 *信息由您创建的回调类来接收。
 *
 *
 *
 *4.使客户机断开连接
 *  a.除去其中包含 token.waitForCompletion 表达式的语句。 主线程将继续执行,而不等待传递发布。
 *  b.测试客户机是否已断开连接。 将错误返回到 MqttCallback 中的 lostConnection 方法之后,MQTT 客户机将断开连接,客户机应用程序也可能断开连接。测试是否有打开的连接。
 *  c.使用常量 Example.quiesceTimeout 来设置使客户机停顿的最长时间。
 *  if (client.isConnected())
 *      client.disconnect(Example.quiesceTimeout);
 *当满足下面三种情况的组合形式时,客户机就完成了: 
 *  a.已经对在此会话中(如果重新启动了会话,,则是在先前会话中)已发布的所有消息调用了回调。
 *  b.消息未完成,然而停顿时间间隔已到期。缺省情况下,停顿时间间隔为 30 秒。通过将要等待的毫秒数作为 client.disconnect 的一个参数来传递,即可更改停顿超时。
 *  c.在发布了某些消息并由客户机进行排队之后,但是在发送这些消息之前调用了 client.disconnect。已排队的消息尚未处于“未完成”状态。如果会话可重新启动,那么重新启动会话时就会重新发送消息。
 *  缺省情况下,停顿时间间隔为 30 秒。

MQTT的消息发布代码:

Java代码  

package com.etrip.wsmqtt.server;  

  

import com.ibm.micro.client.mqttv3.MqttClient;  

import com.ibm.micro.client.mqttv3.MqttDeliveryToken;  

import com.ibm.micro.client.mqttv3.MqttMessage;  

import com.ibm.micro.client.mqttv3.MqttTopic;  

/** 

 * 使用 Java 为 MQ Telemetry Transport 创建异步发布程序 

 *  

 *  

 *  

 * 

 * 消息发布的类的具体的实现 

 *  

 * @author longgangbai 

 *  

 */  

public class WSMQTTServerPubAsync {  

      public static void main(String[] args) {  

            try {  

                  //创建MqttClient对象  

                  MqttClient client = new MqttClient(WSMQTTServerCommon.TCPAddress, WSMQTTServerCommon.clientId);  

                   

                  //创建MQTT相关的主题  

                  MqttTopic topic = client.getTopic(WSMQTTServerCommon.topicString);  

                    

                  //创建MQTT的消息体  

                  MqttMessage message = new MqttMessage();  

                  //设置消息传输的类型  

                  message.setQos(2);  

                    

                  //设置是否在服务器中保存消息体  

                  message.setRetained(false);  

                    

                  //设置消息的内容  

                  message.setPayload(WSMQTTServerCommon.publication.getBytes());  

                    

                  //创建一个MQTT的回调类  

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70300.html