Подпишитесь на всех арендаторов, используя подстановочный знак в Eclipse-hono
Я пытаюсь использовать данные из Хоно. Я делаю это, следуя руководству по запуску потребителя на документацию hono.
В настоящее время я пытаюсь подписаться на всех арендаторов, добавив --tenant.id=* в конце команды mvn. Это приводит к следующей команде:
mvn spring-boot:run -Drun.arguments=--hono.client.host=localhost,--hono.client.username=consumer@HONO,--hono.client.password=verysecret,--destination.TopicTemplate=gw/\!{tenant}/\!{device}/alp,--destination.Hoscalhost,--destination.Port=11883,--tenant.id=*
Я не получаю никаких сообщений при такой подписке. Когда я подписываюсь, используя пример команды (только для DEFAULT_TENANT), я использую сообщения.
Текущее разрешение пользователя выглядит так:
"consumer@HONO": {
"mechanism": "PLAIN",
"password": "verysecret",
"authorities": [ "application" ]
}
Текущая роль приложения выглядит следующим образом:
"application": [
{
"resource": "telemetry/*",
"activities": [ "READ" ]
},
{
"resource": "event/*",
"activities": [ "READ" ]
},
{
"resource": "control/*",
"activities": [ "READ", "WRITE" ]
}
Оба они все еще оригинальные из Hono GitHub.
РЕДАКТИРОВАТЬ: потребитель также подписывается на событие / арендатора. В моем случае это событие / . События, опубликованные по теме события /DEFAULT_TENANT и события /MY_TENANT, используются. Однако потребитель для телеметрии /, кажется, не зарегистрирован.
2 ответа
Я наконец узнал, что происходит.
Кажется, сообщение заблокировано в маршрутизаторе диспетчеризации QPID из-за следующей ошибки: "Не найдено совпадение дерева разбора".
Это можно решить, изменив конфигурацию qpid. В этой конфигурации вы сможете найти следующие записи:
["linkRoute", {
"prefix": "event/",
"direction": "in",
"connection": "broker"
}],
["linkRoute", {
"prefix": "event/",
"direction": "out",
"connection": "broker"
}],
["address", {
"prefix": "telemetry/",
"distribution": "balanced"
}],
Он создает каналы связи (входящие и исходящие) для темы события, но не для темы телеметрии. Добавление этих записей для темы телеметрии решает проблему.
["linkRoute", {
"prefix": "event/",
"direction": "in",
"connection": "broker"
}],
["linkRoute", {
"prefix": "event/",
"direction": "out",
"connection": "broker"
}],
["linkRoute", {
"prefix": "telemetry/",
"direction": "in",
"connection": "broker"
}],
["linkRoute", {
"prefix": "telemetry/",
"direction": "out",
"connection": "broker"
}],
["address", {
"prefix": "telemetry/",
"distribution": "balanced"
}],
Hono (на данный момент) не поддерживает сообщения всех арендаторов. Потребитель всегда относится только к одному арендатору. Это также отражено в спецификациях API телеметрии и событий (в северном направлении).
Использование символов подстановки для получения данных для нескольких / всех арендаторов не поддерживается. Изменение, внесенное вами в конфигурацию диспетчера маршрутизатора, могло заставить вас поверить, что оно действительно работает. Однако определение адреса телеметрии для использования маршрутизации каналов вместо маршрутизации сообщений по умолчанию имеет некоторые последствия, о которых вы должны знать:
- Все телеметрические сообщения будут направляться брокеру сообщений (Artemis), а не напрямую потребителям, подключенным к диспетчерскому маршрутизатору. Это означает, что все сообщения будут записаны в очередь / тему в Artemis. В зависимости от конфигурации Artemis это может также означать, что (телеметрические) сообщения сохраняются, что будет иметь весьма негативное влияние на пропускную способность.
- Ваши клиенты / потребители теперь будут явно зависеть от поддержки брокером (Artemis) подстановочных знаков, используемых в адресах источника ссылок AMQP 1.0 для получения сообщений от нескольких адресов. Хотя это может быть именно тем, чего вы хотите достичь в первую очередь, имейте в виду, что оно связывает ваше приложение с конкретной реализацией сети обмена сообщениями AMQP (в данном случае Artemis), которая не является частью Hono.