【问题标题】:Cumulocity MQTT operation status doesn't changeCumulocity MQTT 操作状态不会改变
【发布时间】:2019-02-25 20:22:56
【问题描述】:

我已经注册了一个试用帐户来测试 Cumulocity 及其 mqtt api。 我想将操作发送到某个设备(当前由java服务模拟)并接收操作结果。

作为手册,我使用以下链接:

以下代码用于对 Cumulocity 做出响应。

if (payload.startsWith("510")) {
    System.out.println("Simulating device restart...");
    client.publish("s/us", "501,c8y_Restart".getBytes(), 2, false);
    System.out.println("...restarting...");
    Thread.sleep(TimeUnit.SECONDS.toMillis(1));
    client.publish("s/us", "503,c8y_Restart".getBytes(), 2, false);
    System.out.println("...done...");
}

501 代码表示重启操作开始,503 代码表示设备重启成功。

但实际上在 Cumulocity UI 中的操作状态已经变成了Pending

如果我再次发送restart 操作,之前的操作将更改为Success,但新的操作将更改为Pending

那么,我做错了什么?

我希望将操作标记为FailedSuccess

【问题讨论】:

    标签: java mqtt paho cumulocity


    【解决方案1】:

    “PENDING”状态始终是 Cumulocity 中每个操作的初始状态。 用于操作的 SmartREST MQTT 始终遵循以下顺序:

    待处理 -> 执行中 -> 成功/失败

    SmartREST 将始终更新 最旧 操作(因为我们希望按历史顺序执行操作)。

    因此,如果您发送 501,它将查找处于 PENDING 状态的最旧匹配操作。 如果您发送 503,它将查找处于 EXECUTING 状态的最早匹配操作。

    从您的解释来看,您的代码执行时是否已经有 2 次重新启动操作尚不完全清楚。您的代码是完全正确的,但如果已经有两个重新启动操作,这将解释为什么一个现在成功而另一个仍处于待处理状态。

    【讨论】:

    • 在我的情况下,是从 GUI 进行的一次重启操作,在设备接收到重启操作后,它会在一段时间后发送 501 代码和 503。状态更改为以下流程:PENDING -> 501 -> EXECUTING -> 503 -> PENDING 但我预期的结果如你所说:PENDING -> 501 -> EXECUTING -> 503 -> SUCCESSFUL/FAILED
    • 当我发送第二次重启操作时 - 新操作将显示为 PENDING 状态,之前(不是最后一个)操作状态将更改为 SUCCESSFUL
    • 所以行为 PENDING -> EXECUTING -> PENDING 不正确。我无法重现它,但如果您有办法重现它,请直接将其报告为错误。之后第二种行为是有意义的,因为您现在有 2 个操作处于 PENDING 状态,它将更新最旧的(不是最新的)
    猜你喜欢
    • 2019-11-15
    • 2019-01-30
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2020-04-16
    相关资源
    最近更新 更多