累积服务器 - 无操作

Accumulation Server - no action

我很难使累积服务器正常工作。我启动了它,但是如果 OCB 收到例如新订阅,它不会给出任何结果。该过程如下所示:

我开始acc。服务器如 tutorial 中所述,来自 OCB 的新克隆 repo。结果我进入控制台:

tmp@tmp-VirtualBox:~/fiware-orion/scripts$ ./accumulator-server.py --port 1028 --url /accumulate --host ::1 --pretty-print -v
verbose mode is on
port: 1028
host: ::1
server_url: /accumulate
pretty: True
https: False
Running on http://[::1]:1028/ (Press CTRL+C to

之后什么都没有发生。如果我进行订阅(教程中最基本的订阅),我会在发出请求的媒体中得到响应:

< HTTP/1.1 201 Created
< Connection: Keep-Alive
< Content-Length: 0
< Location: /v2/subscriptions/5ab5248e50bfc821d0a1b1e0
< Fiware-Correlator: 45df4ff6-2eb3-11e8-912c-0242ac110003
< Date: Fri, 23 Mar 2018 16:00:14 GMT

然而,这可能是罪魁祸首,订阅状态设置为失败(通过要求列出所有订阅并在 Orion Context Explorer 中进行检查)。并且不能更改为非活动状态。一切都是 运行 的预期(我猜)。 OCB 运行 作为安装在 LUbuntu 上的 docker 中的容器,运行良好。这可能是我的错误,因为我正在使用 Insomnia 与 OCB 进行通信并且可能会混合一些东西,但是 OCB 的响应是一切正常。任何帮助将不胜感激。

编辑: 累积服务器不工作。我得到了:

*   Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 1028 failed: Connection refused
* Failed to connect to localhost port 1028: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 1028

在 运行 检查命令之后 (curl -vvvv localhost:1028/accumulate)。

关于订阅我 POST 这个负载:

  {
  "description": "A subscription to get info about Room1",
  "subject": {
    "entities": [
      {
        "id": "Room1",
        "type": "Room"
      }
    ],
    "condition": {
      "attrs": [
        "pressure"
      ]
    }
  },
  "notification": {
    "http": {
      "url": "http://localhost:1028/accumulate"
    },
    "attrs": [
      "temperature"
    ]
  },
  "expires": "2040-01-01T14:00:00.00Z",
  "throttling": 5
}

到 localhost:1026/v2/subscriptions URL。预先实体及其参数和类型都可以。创建后,我请求获取所有订阅并获取:

[
    {
        "id": "5ab7d819209f52528cc2faf7",
        "description": "A subscription to get info about Room1",
        "expires": "2040-01-01T14:00:00.00Z",
        "status": "failed",
        "subject": {
            "entities": [
                {
                    "id": "Room1",
                    "type": "Room"
                }
            ],
            "condition": {
                "attrs": [
                    "pressure"
                ]
            }
        },
        "notification": {
            "timesSent": 1,
            "lastNotification": "2018-03-25T17:10:49.00Z",
            "attrs": [
                "temperature"
            ],
            "attrsFormat": "normalized",
            "http": {
                "url": "http://localhost:1028/accumulate"
            },
            "lastFailure": "2018-03-25T17:10:49.00Z"
        },
        "throttling": 5
    }
]

我猜他失败了,因为没有发送通知,但我不确定。

我看到这里有两个问题。

首先,蓄能器不工作。 Maybe 是一个奇怪的网络问题,它将 IPv4 名称查找(即 curl localhost:1028/accumulate 被 OS 解决为 curl 127.0.0.1:1028/accumulate)与仅在 IPv6 接口中侦听的累加器(即仅在 ::1 但不在 127.0.0.1 中)。我知道你是 运行 curl 命令 在同一主机 中,累加器正在侦听,不是吗?

我的建议是使用 --host 累加器参数(e.e。--host 127.0.0.1)并在 curl 命令中使用直接 IP 以使其工作。

第二个问题是由于您使用 localhost 作为通知端点:

 "url": "http://localhost:1028/accumulate"

这意味着端口 1028 在 docker 容器 内,其中 Orion 是 运行。但是,据我了解,您的累加器服务器在容器外 容器主机 中运行。因此,您应该使用允许您从容器到达主机的 IP(并确保没有网络流量拦截器到位,例如防火墙)。所以,你的问题在这里转化为 "How to reach docker containers host from a docket container"(我不确定答案,但应该有很多关于该主题的文献:)

累积服务器需要运行在可用的物理接口上。简而言之,使用环回接口与 Orion Context Broker 运行 作为 Docker 容器进行交互几乎是不可能的。可以肯定的是,就主机虚拟化而言 运行ning 主机已经到位(就像我的情况一样)。

可以使用

在 linux 中检查可用接口
    ip addr

选择一个符合我们要求的后,我们 运行 累加器如前所述,但是它的 ip 地址是我们选择的那个。然后我们使用启动 acc 时使用的地址添加对 OCB 的订阅。服务器很好,通信很好。