Я проектирую систему со многими устройствами, использующими MQTT для подключения к центральному посреднику.
Есть несколько мастеров, которые могут отправлять запросы на определенные устройства, которые являются подчиненными.Запрос от одного ведущего устройства обычно направляется одному ведомому.
Темой для запросов может быть: mysystem/slaveId/req
, поэтому подчиненные могут подписаться на эту тему, а ведущее публикуется в той же теме.Только адресованный ведомый получит запрос, как и должно быть.
Мой вопрос заключается в том, как определить тему для ответов.Я сомневаюсь между: mysystem/slaveId/res/masterId
или просто mysystem/slaveId/res
.
В первом случае я должен отправить masterId
ведомому в полезной нагрузке запроса, чтобы подчиненное устройство могло построитьназвание темы ответа.Ответ получит только мастер, отправивший запрос.
Во втором случае ответ получат все активные мастера, поскольку в теме нет masterId
.Ведущий, который отправляет запрос, должен определить его ответ, посмотрев requestId
в полезной нагрузке (которая также была отправлена в полезной нагрузке запроса).
Я думаю, что первый выбор лучше, однако Устройство Shadow сервиса AWS использует названия тем, аналогичные второму выбору.Например, устройство, которое отвечает на запрос get, публикует сообщение на $aws/things/myLightBulb/shadow/get/accepted
.Таким образом, каждое устройство получит сообщение, а не только запрашиваемое.
Я думаю, что AWS делает хороший выбор, поэтому я испытываю желание следовать ему ... однако я не уверен, понял ли я, что они делают.