Я ищу решение для опроса сообщений от MQTT broker. Здесь я кратко опишу решение.Нужно опросить Mqtt broker из java REST API для уже опубликованных сообщений в MQTT
У нас есть класс контроллера Spring, который предоставляет API REST для обработки определенных диагностических данных, связанных с автомобилем. Через один из этих API-интерфейсов Notify3P()
я создаю Java-клиент MQTT и публикую сообщения на основе некоторых входных данных брокеру MQTT по данной теме. Мое требование - уведомлять стороннюю систему каждый раз, когда клиент публикует сообщение в MQTT.
Система 3P собирает сообщение от MQTT после получения уведомления. Затем ему необходимо получить сообщение от брокера MQTT через API REST getMessage()
(который нам нужно разоблачить над указанным выше классом контроллера). API getMessage()
должен опросить MQTT для уже опубликованных сообщений и передать их системе 3P. После этого система 3P выполнит некоторую обработку и отправит ответ на нашу систему через другой REST API postMessage()
, открытый в нашем классе контроллера. postMessage()
должен опубликовать сообщение на тему response
на MQTT. Мне нужен еще один REST API checkResponse()
, который затем опросит тему MQTT response
и отправит ответ клиенту.
Что я сделал до сих пор: при запуске приложения у меня есть фасоль запуска, которая слушает MQTT request
и response
тем. Теперь я публикую данные до темы request
, используя REST API Notify3P()
. Я подключил обратный вызов с компонентом запуска, который получает сообщение. Проблема возникает, когда 3P необходимо вызвать моего контроллера для опроса сообщения из MQTT.
Непонятно, как сдерживать сообщения на MQTT и потреблять их по требованию. Есть ли механизм для этого в MQTT? Также после того, как сообщения системы 3P отправляются на response
, затем снова, как я могу опросить тему response
, чтобы получить ответ от MQTT и отправить клиентам моего контроллера?
Я надеюсь, что описание проблемы имеет смысл. Если есть какое-либо решение от кого-либо, напишите об этом. Любой образец кода будет полезен.
Спасибо заранее!
Привет @Ralight, спасибо за сообщение. Мой контроллер имеет только некоторые REST API-интерфейсы, выставленные его вызывающим абонентам.У меня есть стартовый весенний боб, который подписывается на тему «Запрос» на брокере. Затем через мои контроллеры клиенты API отправляют свои данные в «Request» Topic. На этом этапе обратный вызов моего компонента запуска запускается, и при любом приходе сообщения он уведомляет 3P. Теперь 3P должен получить сообщение через API, открытый на контроллере. Это связано с тем, что система 3P может не захотеть немедленно обрабатывать msg. Я думаю, что единственным решением было бы разместить сообщения на глобальной карте, такие как структура данных. – chakrar
Да, сообщения должны храниться где-то, чтобы делать то, что вы хотите. – ralight
Pls исправьте меня, если я ошибаюсь. Предположим, я хочу публиковать сообщения в MQTT от клиента. И я хочу получить опубликованные сообщения по одному позже от брокера MQTT. Этот конкретный сценарий невозможно реализовать с помощью MQTT. Мне нужно сохранить сообщение где-нибудь и получить его оттуда. Я прав? Если мое понимание верное, то мой вопрос заключается в том, почему эти накладные расходы на сохранение отдельного хранилища сообщений необходимы? Почему мы не можем использовать очереди mqtt broker для этой цели? – chakrar