1

是否有使用 MQTT 发布计划/延迟消息的最佳实践,例如,使用 Mosquitto 或 HiveMQ 代理?

用例是:告诉订阅者在 15 分钟内执行一些维护。

最佳情况下,该用例将通过发布消息“请立即执行维护”来解决,并将消息标记为“不早于 15 分钟后交付”。

4

2 回答 2

4

虽然我不建议在任何具有高吞吐量的情况下这样做,但至少使用 HiveMQ 您可以执行以下操作:

  1. 实现OnPublishReceivedCallback
  2. 将使用PublishService的 Runnable 调度到某种共享的 ScheduledExecutorService。Runnable 通过 PublishService 重新发布发布
  3. OnPublishReceivedCallback 需要通过抛出 OnPublishReceivedException 来丢弃原始发布(使用 false 作为构造函数参数,这样您就不会断开发布客户端的连接)
于 2016-06-16T09:25:33.867 回答
2

不会,订阅主题的所有已连接客户端会立即发送消息,而具有持久订阅的断开连接客户端会在重新连接时发送消息。

如果您想处理延迟消息,则必须在将它们发布到代理之前实现自己的存储和转发机制。

于 2016-06-16T09:09:05.820 回答