0

所以我是 MQTT 的新手,我必须制作一个“消息”项目,在我的索引页面中加载所有消息(发送到某个主题)而不需要很长的加载时间,我正在使用 Yii2 框架高级项目,我'已经完成了发布代码,在模型中我创建了 AfterSave 方法,并且每次将某些内容保存到数据库时,它都会向我的 MQTT 代理发布一条消息,该代理位于我的 Raspberry PI 中

例子

我拥有一家酒店,每次登录后端时,我都希望在索引中包含发送到 MQTT mosquitto“request-reservation”(如通知)中该主题的所有预订请求。

就像我说的,我正在使用 Yii2 框架高级项目,我用于 MQTT 的扩展是 Bluerhinos\phpMQTT

我已经拥有的代码:

类模型 ReservationRequest.php (这是工作并发送到主题,因为我已经在 shell 中测试过)

public function afterSave($insert, $changedAttributes) {
        parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
        if ($insert){
            $this->publish("request-reservation", "New notification of a reservation request with the ID: '. $this->id . PHP_EOL");
        }
}

欢迎任何建议,感谢您的关注

4

1 回答 1

2

排序答案是你没有。

MQTT 不是消息队列系统。它只会将尚未传递给具有持久订阅的客户端的消息排队,该持久订阅在发送消息时当前处于脱机状态。

你可能有 2 个选择

  1. 使用所有房间的当前状态发布一条消息,例如{ "room1": "occupied", "room2": "free",...}并设置保留标志,以便在订阅该主题时始终将最新版本的消息传递给客户端。

  2. 对可以在数据库上运行查询以检索所有房间的当前状态的后端进行 REST 调用。

于 2021-01-06T07:41:26.013 回答