Статус операции Cumulocity MQTT не меняется

Я зарегистрировал пробную учетную запись, чтобы протестировать Cumulocity и его API mqtt. Я хочу отправить операцию на какое-то устройство (в настоящее время эмулируемое службой 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.

Изображение 2

Итак, что я делаю неправильно?

Я ожидаю пометить операцию как Failed или Success.


person Vitaliy Mikhailov    schedule 25.02.2019    source источник


Ответы (1)


Состояние «PENDING» всегда является начальным состоянием каждой операции в Cumulocity. SmartREST MQTT для операций всегда следует следующему порядку:

ОЖИДАНИЕ -> ВЫПОЛНЕНИЕ -> УСПЕШНО/НЕУДАЧНО

SmartREST всегда будет обновлять самую старую операцию (поскольку мы хотим выполнять операции в историческом порядке).

Поэтому, если вы отправите 501, он будет искать самую старую совпадающую операцию в состоянии PENDING. Если вы отправите 503, он будет искать самую старую совпадающую операцию в состоянии ВЫПОЛНЕНИЕ.

Из вашего объяснения не совсем ясно, было ли уже 2 операции перезапуска, когда вы выполняли свой код. Ваш код полностью верен, но если бы уже было две операции перезапуска, это объяснило бы, почему одна сейчас УСПЕШНА, а другая все еще находится в ОЖИДАНИИ.

person TyrManuZ    schedule 25.02.2019
comment
В моем случае была одна операция перезапуска из графического интерфейса, после получения операции перезапуска устройством он отправлял код 501 и 503 после некоторой задержки. Состояние изменилось следующим потоком: ОЖИДАНИЕ -> 501 -> ВЫПОЛНЕНИЕ -> 503 -> ОЖИДАНИЕ Но я ожидал результата, как вы говорите: ОЖИДАНИЕ -> 501 -> ВЫПОЛНЕНИЕ -> 503 -> УСПЕШНО/НЕУДАЧНО - person Vitaliy Mikhailov; 25.02.2019
comment
Когда я отправлю вторую операцию перезапуска - новая операция появится со статусом PENDING, а предыдущее (не последнее) состояние операции изменится на SUCCESSFUL - person Vitaliy Mikhailov; 25.02.2019
comment
Таким образом, поведение PENDING -> EXECUTING -> PENDING некорректно. Я не могу воспроизвести его, но если у вас есть способ воспроизвести его, сообщите об этом напрямую как об ошибке. Впоследствии второе поведение имеет смысл, потому что теперь у вас есть 2 операции в PENDING, и она обновит самую старую (а не последнюю) - person TyrManuZ; 25.02.2019