2

我正在尝试使用来自 hono 的数据。我按照关于在 hono 文档上启动消费者的指南来做到这一点。
我目前正在尝试通过在 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/ 。在主题 event/DEFAULT_TENANT 和 event/MY_TENANT 上发布的事件被消费。但是,遥测消费者/似乎没有注册。

4

2 回答 2

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"
  }],
于 2018-10-26T11:11:55.230 回答
1

Hono(截至目前)不支持消费所有租户的消息。消费者始终仅限于单个租户。这也反映在(北向)遥测事件API 规范中。

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

  • 所有遥测消息都将路由到消息代理 (Artemis),而不是直接路由到连接到调度路由器的消费者。这意味着所有消息都将写入Artemis 中的队列/主题。根据 Artemis 配置,这也可能意味着(遥测)消息会被持久化,这将对吞吐量产生相当大的负面影响。
  • 您的客户/消费者现在将明确依赖 (Artemis) 代理对 AMQP 1.0 链接源地址中使用的通配符的支持,以接收来自多个地址的消息。虽然这可能是您首先想要实现的目标,但请注意它将您的应用程序与属于 Hono 的 AMQP 消息传递网络(在本例中为 Artemis)的特定实现联系起来。
于 2018-10-29T08:55:16.560 回答