Подпишитесь на всех арендаторов, используя подстановочный знак в Eclipse-hono - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать данные из Хоно.Я делаю это, следуя руководству по Запуск потребителя в документации 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 ]

0 голосов
/ 29 октября 2018

Hono (на данный момент) не поддерживает прием сообщений всех арендаторов.Потребитель всегда относится только к одному арендатору.Это также отражено в спецификациях API Телеметрия и Событие (северная граница).

Использование символов подстановки для получения данных для нескольких / всех арендаторов не допускается.поддерживается.Изменение, внесенное вами в конфигурацию Dispatch Router, могло заставить вас поверить, что оно действительно работает.Однако определение адреса телеметрии для использования маршрутизации канала вместо стандартной маршрутизации сообщений имеет некоторые последствия, о которых вы должны знать:

  • Все телеметрические сообщения будут направляться посреднику сообщений (Artemis), а не напрямую потребителям, подключенным к Диспетчерскому маршрутизатору.Это означает, что все сообщения будут записаны в очередь / тему в Artemis.В зависимости от конфигурации Artemis это также может означать, что (телеметрические) сообщения сохраняются, что будет иметь весьма негативное влияние на пропускную способность.
  • Теперь ваши клиенты / потребители будут явно зависеть от поддержки брокером (Artemis) подстановочных знаковиспользуется в адресах источника ссылок AMQP 1.0 для получения сообщений с нескольких адресов.Хотя это может быть именно тем, чего вы хотите достичь в первую очередь, имейте в виду, что оно связывает ваше приложение с конкретной реализацией AMQP Messaging Network (в данном случае Artemis), которая является не частью Hono.
0 голосов
/ 26 октября 2018

Я наконец-то узнал, что происходит.
Кажется, сообщение заблокировано в маршрутизаторе диспетчеризации 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"
  }],
...