向多个MQTT服务器订阅主题问题

weixin_40290083 2019-11-14 07:46:42
项目需求要向两个MQTT服务器订阅主题,分别编写了两个接收主题的方法

向A服务器订阅方法
int aMsgArrvd(void * context, char * topic,int topicLen,MQTTClient_message * message1){

//处理消息
MQTTClient_freeMessage(&message1);
MQTTClient_free(topic);
return 1;
}

向服务器B订阅方法
int bMsgArrvd(void * context, char * topic,int topicLen,MQTTClient_message * message2){

//处理消息
MQTTClient_freeMessage(&message2);
MQTTClient_free(topic);
return 1;
}

服务器A的数据频率比较高,服务器B的数据频率比较低,接收到服务器B的消息时,会造成程序异常退出。当把 bMsgArrvd函数中的MQTTClient_freeMessage(&message);注释掉后,程序不会异常退出,但是B服务器会一直在处理消息,无论有没有消息。
打印了一下message的地址,现个方法中message的地址会错乱,也就是说aMsgArrvd可能会打印出message1和message2的地址,同样bMsgArrvd也有可能打印出message1和message2的地址
环境:MQTT服务器:mosquitto mqtt库:libpaho-mqtt,开发语言:C

请问:一个应用程序能不能向多个MQTT服务器订阅消息,如果能,我现在的问题该如何解决。
...全文
977 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bruce_cd 2021-04-26
  • 打赏
  • 举报
回复
根据官方定义,该函数返回值为布尔型,true表示成功接收完消息;false表示有问题,客户端会重新调用MQTTClient_messageArrived接收数据。
“This function must return a boolean value indicating whether or not the message has been safely received by the client application. Returning true indicates that the message has been successfully handled. Returning false indicates that there was a problem. In this case, the client library will reinvoke MQTTClient_messageArrived() to attempt to deliver the message to the application again.”
weixin_40290083 2019-11-16
  • 打赏
  • 举报
回复
问题解决了,bMsgArrvd在这里帖的代码中返回值为1,但是在实际项目中的返回值却为0,如果返回值为0,当第一次消息到达时可以正常接收,当第二次消息到达时,由于第一次返回值为0时,第二次就不会成功,为什么会返回值的问题造成这样的情况不知道原因。欢迎讨论

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧