我有一个MQTT回调来转发通过SOAP端点收到的消息中的部分数据,但是当SOAP端点出错时,这些消息就会丢失,永远不会到达最终消费者。
我知道不同的QOS和递送令牌,但我不确定其中任何一个是否真的会帮助我重新发送这些消息,例如在触发异常之后。消息可以"返回"到主题以便以后重试或类似的东西,以确保正确处理完整的消息?
在客户端,我使用Eclipse-Paho,通过Maven:
// read a file into memory
#include <iostream> // std::cout
#include <fstream> // std::ifstream
int main () {
std::ifstream is ("test.txt", std::ifstream::binary);
if (is) {
// get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
std::cout << "Reading " << length << " characters... ";
// read data as a block:
is.read (buffer,length);
if (is) // <== this is really odd
std::cout << "all characters read successfully.";
else
std::cout << "error: only " << is.gcount() << " could be read";
is.close();
// ...buffer contains the entire file...
delete[] buffer;
}
return 0;
}
从此存储库: https://repo.eclipse.org/content/repositories/paho-releases
在服务器端:
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.0.1</version>
</dependency>
我还应该提供什么?
答案 0 :(得分:1)
不,一旦交付给客户,消息就完全从MQTT系统消失了。
您可以在MQTT客户端应用程序中构建任何存储和重试逻辑,以处理下游系统中的任何故障。