Подпишитесь на всех арендаторов, используя подстановочный знак в 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.
Другие вопросы по тегам