Как реализовать запрос в MQTT? - PullRequest
0 голосов
/ 22 апреля 2020

Существует сервер IoT, который поддерживает только протокол MQTT, и администратор поделился приведенным ниже кодом для получения данных с сервера

mosquitto_sub -v -t "app/26" -h broker.example.com -p 1883  -u "dir1-mqtt" -P "5sp-1001-tech

На самом деле я не знаю, как с этим справиться.

Как я могу отправить этот запрос к цели и получить ответ самым быстрым способом?

1 Ответ

2 голосов
/ 22 апреля 2020

Короткий ответ: нет. Ваша модель MQTT неверна.

MQTT не является моделью запроса / ответа * например, как HTTP, это модель обмена сообщениями публикации / подписки (публикации / подписки). В модели pub / sub производитель данных публикует сообщение для topi c, число подписчиков на эту topi c может быть где угодно, от 0 до N, у издателя нет возможности узнать, сколько существует подписчиков (и на самом деле не должно волновать).

Это означает, что все, что вам нужно сделать, чтобы получить данные, это подписаться на предоставленную топику c (в данном случае app/26), и когда появятся новые данные, они будут доставлено вашему клиенту.

Существуют варианты, чтобы при подписке вы всегда получали последнее опубликованное сообщение. Это делается с помощью производящего клиента, устанавливающего оставшийся бит в заголовке сообщения, который заставит посредника удержать это сообщение и доставить его сначала всем клиентам, когда они подписываются на топи c. Следующее сообщение с этим битом, установленным в этой топике c, заменит предыдущее. Но это контролируется клиентом, производящим данные, а не потребителем.

* Вы можете реализовать запрос / ответ, используя отдельные темы, и MQTT v5 имеет дополнительный заголовок для указания ответа топи c. Но требует, чтобы клиент, производящий данные, ожидал получить запрос на данную топи c и был бы способен ответить на поставляемую топи c.

...