MQAT在messageArrived方法中的异常时重试

时间:2016-08-08 17:05:46

标签: java callback message-queue mqtt mosquitto

我有一个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>

我还应该提供什么?

1 个答案:

答案 0 :(得分:1)

不,一旦交付给客户,消息就完全从MQTT系统消失了。

您可以在MQTT客户端应用程序中构建任何存储和重试逻辑,以处理下游系统中的任何故障。