Можно ли заставить Mosquito Mqtt и RTI DDS общаться друг с другом?
Я хочу, чтобы мой подписчик Mqtt подписывался на данные от издателя DDS или наоборот.
Можно ли заставить Mosquito Mqtt и RTI DDS общаться друг с другом?
Я хочу, чтобы мой подписчик Mqtt подписывался на данные от издателя DDS или наоборот.
Нет, вам придется написать свой собственный бридж
Я перемещаю свой комментарий из ответа hardilib в его собственный ответ, а не оставляю его в комментариях.
Чтобы «DDS DataWriter мог общаться с подписчиком MQTT» или «издатель MQTT мог общаться с DDS DataReaders», вам необходимо реализовать приложение-мост, которое:
1) Подписывается на очередь сообщений MQTT (или тему DDS).
2) Преобразует («изменяет формат») данные из объекта сообщения MQTT (или образца DDS) в образец DDS (или объект сообщения MQTT).
3) Записывает данные в тему DDS с помощью настроенного экземпляра DDS DataWriter (или записывает данные в очередь сообщений MQTT).
Если две инфраструктуры эффективно используют один и тот же тип данных (определенный в IDL или около того), то все просто.
В лучшем случае вы можете реализовать класс, который имеет все необходимые методы, чтобы действовать как экземпляр сообщения (возвращаемый средством чтения MQTT или написанный средством записи MQTT), так и пример экземпляра типа DDS (который может быть принят). с помощью DataWriter или DataReader) одновременно. В этом случае вы ожидаете DataReader, пока не получите новый образец, и немедленно вызываете средство записи MQTT с полученными образцами. Или вы ожидаете в очереди MQTT, принимаете входящие сообщения, а затем немедленно вызываете DataWriter для записи сообщения MQTT, которое вы только что получили, используя DDS DataWriter.
В худшем случае это совершенно разные типы, и в этом случае вам нужно написать пару методов перевода, которые понимают структуру как того, что было прочитано, так и того, что нужно записать.
Реальность будет где-то посередине. Становится сложнее, если тип MQTT просто определен как просто «строка ascii» переменной длины, и в этом случае ваши методы перевода должны иметь возможность маршалировать (сериализовать/десериализовать) данные в DDS и из него.