MQTT如何配配置使得客户端收到且仅收到一次消息

1.命令行方式

为了保证客户端能够收且仅收到一次,需要在发布消息时,设置clean_session=false,qos=2,具体到命令行为./mosquitto_pub -q 2 -t 具体的topic -m 具体的消息

retain说明:

在MQTT协议中,PUBLISH消息固定头部RETAIN标记,只有为1才要求服务器需要持久保存此消息,除非新的PUBLISH覆盖。

对于持久的、最新一条PUBLISH消息,服务器不但要发送给当前的订阅者,并且新的订阅者(new subscriber,同样需要订阅了此消息对应的Topic name)会马上得到推送。

2. MQTT Client library for C

首先在linux下,解压缩paho.mqtt.c-master(C lib).zip,然后make,make install即可

cliend端示例代码

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTClient.h"

#define ADDRESS     "tcp://localhost:1883"
#define CLIENTID    "ExampleClientPub"
#define TOPIC       "MQTT Exa
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java代码示例,演示如何在MQTT服务端上将消息从一个客户端转发到另一个客户端。 ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MqttServer { private static final String BROKER_URL = "tcp://localhost:1883"; private static final String CLIENT_ID = "server"; private static final String TOPIC = "test"; private static final int QOS = 1; public static void main(String[] args) throws MqttException { // 创建 MQTT 客户端 MqttClient mqttClient = new MqttClient(BROKER_URL, CLIENT_ID, new MemoryPersistence()); // 创建消息转发器 mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable throwable) { System.out.println("连接丢失"); } @Override public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { // 接收到消息时转发给另一个客户端 String payload = new String(mqttMessage.getPayload()); String newTopic = "another_client/topic"; mqttClient.publish(newTopic, new MqttMessage(payload.getBytes())); } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { System.out.println("消息投递完成"); } }); // 连接 MQTT 服务端 MqttConnectOptions options = new MqttConnectOptions(); options.setCleanSession(true); mqttClient.connect(options); mqttClient.subscribe(TOPIC, QOS); // 循环等待消息 while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 在上面的代码中,我们创建了一个名为 `MqttServer` 的类作为 MQTT 服务端。在 `main()` 方法中,我们首先创建了一个 MQTT 客户端,并设置了一个消息转发器,用于接收从一个客户端发布的消息,并将其转发给另一个客户端。 在转发器的 `messageArrived()` 方法中,我们将接收到消息的负载提取出来,并使用 `mqttClient.publish()` 方法将其发布到另一个客户端的主题上。 最后,在循环中我们使用 `Thread.sleep()` 方法等待消息的到来。你可以将 `MqttServer` 类部署到你的 MQTT 服务器上,并在另一个客户端上订阅 `another_client/topic` 主题来接收转发的消息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值