[10] MQTT,mosquitto,Eclipse Paho---MQTT消息格式之Publication(消息发布)之QoS==0

在MQTT协议中,消息的发布相对来说比较复杂一些,因为里面牵涉到了QoS(服务质量)和Retained(是否正服务器端存储消息)已经Persistence(当网络故障,在本地客户端存储信息)。其中最为灵活的是QoS的取值,QoS取不同值,就有不同的消息流,也就对应不同了消息类型。首先咱们来讨论QoS等于0的情况。QoS等于0意味着只发送一次,而不管接收方是否收到。

import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;


import com.test.mqtt.sub.CustomMQTTCallBack;


public class PublicationExample4QoS0 {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//System.setProperty("java.util.logging.config.file","E:/MQTTWork/ExcelDesignTime/com.tibco.tpcl.mqttpaho/resources/logging.properties");
        String broker = "tcp://192.168.80.196:1883" ;
        String clientId = "paho-1" ;
        MemoryPersistence persistence = new MemoryPersistence();
         try {
                MqttClient sampleClient = new MqttClient(broker, clientId,persistence);
                MqttConnectOptions connOpts = new MqttConnectOptions();
                //connOpts.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
                System. out .println("The MQTT Version is:"+connOpts.getMqttVersion());
                connOpts.setCleanSession( false );
                System. out .println( "Connecting to broker: " + broker);
                sampleClient.connect(connOpts);
                System. out .println( "Connected" );
                sampleClient.setCallback(new CustomMQTTCallBack());
                MqttMessage message=new MqttMessage();
                message.setPayload("HelloWorld!".getBytes());
                message.setQos(0);
                message.setRetained(true);
                sampleClient.publish("test",message);
       
        } 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);
                me.printStackTrace();
        }


	}


}





在 Linux C 环境下,使用 Paho MQTT 发送多条消息可以通过循环发送的方式实现。以下是一个使用 Paho MQTT C 客户端发送多条消息的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include "MQTTClient.h" #define ADDRESS "tcp://localhost:1883" #define CLIENTID "ExampleClientPub" #define TOPIC "test" #define QOS 1 #define TIMEOUT 10000L int main(int argc, char* argv[]) { MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token; int rc; char* message = "Hello, MQTT!"; int count = 10; conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1; MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL); if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { printf("Failed to connect, return code %d\n", rc); exit(EXIT_FAILURE); } while (count--) { pubmsg.payload = message; pubmsg.payloadlen = strlen(message); pubmsg.qos = QOS; pubmsg.retained = 0; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token); printf("Waiting for publication of %d message on topic %s for client with ClientID: %s\n", count + 1, TOPIC, CLIENTID); rc = MQTTClient_waitForCompletion(client, token, TIMEOUT); printf("Message with delivery token %d delivered\n", token); } MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client); return rc; } ``` 在上面的示例代码中,我们首先定义了要发送的消息内容和发送的次数。然后,我们创建了一个 MQTT 客户端(MQTTClient)对象并连接到 MQTT 服务器。接着,我们使用一个循环来多次发送相同的消息。在循环中,我们创建了一个 MQTT 消息MQTTClient_message)对象并设置了要发送的消息内容、主题、QoS 等参数。然后,我们使用 MQTT 客户端对象的 MQTTClient_publishMessage 方法来发送该消息,并等待服务器确认消息已经发送成功。最后,我们断开与服务器的连接并释放资源。 需要注意的是,在使用 Paho MQTT C 客户端发送多条消息时,需要根据实际情况设置 QoS、超时时间等参数,并根据需要进行错误处理和重试等操作。同时,由于 C 语言不支持自动垃圾回收,因此需要手动释放资源,避免出现内存泄露等问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值