Как события из произвольных тем mqtt, таких как «основа / контекст / квалификатор / подтема», складываются в структуру тем адаптера Hono MQTT? Вы просто публикуете свое событие в теме: «событие» и используете тело сообщения для установки контекста из исходной темы?
Адаптер Eclipse Hono MQTT: отображение тем MQTT
Ответы (2)
Доступно несколько вариантов.
Если тема, в которой будет публиковаться устройство / клиент, настраивается, у вас есть два варианта:
1.1. Опубликуйте в теме
event
(или простоe
, чтобы сэкономить несколько байтов на сообщение) и включите всю соответствующую контекстную информацию в полезную нагрузку сообщения, чтобы потребитель мог выяснить цель сообщения из полезной нагрузки.1.2. Публикуйте в теме, которая выглядит как
event/${tenant-id}/${device-id}/${custom-path}
, где${tenant-id}
- это идентификатор клиента, которому принадлежит устройство, а${device-id}
- идентификатор устройства.${custom-path}
может быть любым произвольным сегментом пути по вашему выбору. Адаптер MQTT будет пересылать полезные данные сообщения MQTT в сообщении AMQP, для которого свойство address установлено наevent/${tenant-id}
и которое будет содержать свойство приложения с именем orig_address, которое будет содержать полный название темы, в которой изначально было опубликовано сообщение. Затем потребитель может использовать эту информацию для получения контекстной информации, такой как цель сообщения. См. руководство пользователя адаптера MQTT для подробностей.Если тема не может быть настроена на устройстве, вы все равно можете реализовать свой собственный адаптер MQTT. Это звучит сложнее, чем есть на самом деле, потому что большая часть требуемых функций уже доступна в базовом классе
org.eclipse.hono.adapter.mqtt.AbstractVertxBasedMqttProtocolAdapter
, от которого вы можете унаследовать и просто реализовать логику сопоставления тем. Адаптер Kura реализован именно так и состоит всего из нескольких строк кода. Просто взгляните наorg.eclipse.hono.adapter.kura.KuraProtocolAdapter
.
Попытка использовать несколько вариантов темы MQTT, например
- телеметрия / мой-тенант / org.acme: мое-устройство-1 / customPath
- телеметрия / my-tenant / org.acme: my-device-1 / custom / path
- телеметрия /// настраиваемый / путь
но для всех случаев свойства приложения AMQP установлены на orig_address -> t
дополнительно могут видеть messageAnnotations "resource" -> telemetry/my-tenant/org.acme:my-device-1
, но оно еще не содержит полной темы
Есть ли возможность получить полный путь к теме MQTT без реализации настраиваемого адаптера MQTT? используя eclipse/hono-adapter-mqtt-vertx:1.4.0