2016-06-16 10 views
1

Есть ли наилучшая практика для публикации запланированных/отложенных сообщений с помощью MQTT, например, с помощью брокеров Mosquitto или HiveMQ?Можно ли отправить сообщение в будущее?

Вариант использования: Сообщите абоненту выполнить некоторое обслуживание за 15 минут.

Оптимально, прецедент будет решен путем публикации сообщения «выполнить обслуживание сейчас» и отметьте сообщение «доставить не раньше, чем через 15 минут».

ответ

1

Нет, сообщения доставляются немедленно для всех подключенных клиентов, подписанных на тему и при повторном подключении для отключенных клиентов с постоянными подписками.

Если вы хотите сделать отложенные сообщения, вам придется реализовать свой собственный механизм хранения и пересылки до того, как они будут опубликованы брокеру.

3

Хотя я бы не рекомендовал это делать в любом случае с высокой пропускной способностью, по крайней мере, с HiveMQ вы можете сделать следующее:

  1. Реализовать OnPublishReceivedCallback.
  2. Запланируйте Runnable, который использует PublishService для своего общего пользования ScheduledExecutorService. Runnable повторно публикует публикацию через PublishService
  3. OnPublishReceivedCallback нужно выбрасывать оригинал публиковать, бросая OnPublishReceivedException (используйте ложь в качестве параметра конструктора, так что вы не отключите клиент публикации)