2013-11-01 2 views
0

Я ищу решение для опроса сообщений от 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 и отправить клиентам моего контроллера?

Я надеюсь, что описание проблемы имеет смысл. Если есть какое-либо решение от кого-либо, напишите об этом. Любой образец кода будет полезен.

Спасибо заранее!

ответ

0

Возможно, у вас есть идея MQTT немного смущена. Одним из ключевых моментов является отсутствие опроса.

Вы подписываетесь на свою response тему и публикуете статью request. Как только появится ответ, он будет отправлен брокером. Вы не можете сдерживать сообщения.

Звучит так, как ваш контроллер также должен говорить MQTT. Если он с самого начала подписывается на тему response, он будет получать сообщения, и вы можете делать с ними то, что вам нужно, не нужно для опроса.

Чтобы достичь именно того, что вы хотите, когда третье лицо уведомляет контроллер читать сообщения от MQTT, тогда контроллер должен будет использовать MQTT в любом случае. В этот момент вы также можете сделать это «правильно». Если вы не хотите интегрировать MQTT в свой контроллер, вы не сможете делать то, что вы описали, и вам придется придумать еще один способ общения между этими двумя компонентами.

Резюме - получите ваш контроллер, чтобы поговорить с MQTT, если сможете.

+0

Привет @Ralight, спасибо за сообщение. Мой контроллер имеет только некоторые REST API-интерфейсы, выставленные его вызывающим абонентам.У меня есть стартовый весенний боб, который подписывается на тему «Запрос» на брокере. Затем через мои контроллеры клиенты API отправляют свои данные в «Request» Topic. На этом этапе обратный вызов моего компонента запуска запускается, и при любом приходе сообщения он уведомляет 3P. Теперь 3P должен получить сообщение через API, открытый на контроллере. Это связано с тем, что система 3P может не захотеть немедленно обрабатывать msg. Я думаю, что единственным решением было бы разместить сообщения на глобальной карте, такие как структура данных. – chakrar

+0

Да, сообщения должны храниться где-то, чтобы делать то, что вы хотите. – ralight

+0

Pls исправьте меня, если я ошибаюсь. Предположим, я хочу публиковать сообщения в MQTT от клиента. И я хочу получить опубликованные сообщения по одному позже от брокера MQTT. Этот конкретный сценарий невозможно реализовать с помощью MQTT. Мне нужно сохранить сообщение где-нибудь и получить его оттуда. Я прав? Если мое понимание верное, то мой вопрос заключается в том, почему эти накладные расходы на сохранение отдельного хранилища сообщений необходимы? Почему мы не можем использовать очереди mqtt broker для этой цели? – chakrar

Смежные вопросы