在Eclipse-hono中使用通配符订阅所有租户

时间:2018-10-25 11:27:27

标签: eclipse-hono

我正在尝试使用hono中的数据。为此,请遵循hono文档中关于Starting a consumer的指南。
我目前正在尝试通过在mvn命令末尾添加--tenant.id = *来订阅所有租户。这将导致以下命令:

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的原始版本。

编辑:使用者也订阅事件/租户。就我而言,这是事件/ 。消费在主题event / DEFAULT_TENANT和event / MY_TENANT上发布的事件。但是,遥测用户/ 似乎未注册。

2 个答案:

答案 0 :(得分:1)

我终于发现发生了什么事。
似乎该消息由于以下错误而在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"
  }],

答案 1 :(得分:0)

Hono(到目前为止)不支持使用所有租户的消息。消费者始终只限于单个租户。这也反映在TelemetryEvent API规范中。

不支持使用通配符来接收多个/所有租户的数据。您对调度路由器配置所做的更改可能使您相信它确实起作用。但是,定义遥测地址以使用链接路由而不是默认的消息路由有一些后果,您应该注意:

  • 所有遥测消息将被路由到消息代理(Artemis),而不是直接路由到与Dispatch Router相连的使用者。这意味着所有消息将写入到Artemis中的队列/主题。根据Artemis的配置,这可能还意味着(遥测)消息会持续存在,这会对吞吐量产生相当大的负面影响。
  • 您的客户/消费者现在将明确依赖(Artemis)经纪人对AMQP 1.0链接源地址中使用的通配符的支持,以从多个地址接收消息。虽然这可能是您首先要实现的目标,但是请注意,它将您的应用程序与AMQP消息网络(在本例中为Artemis)的特定实现相关联,该网络不是Hono的一部分。 / li>