Сервер накопления - никаких действий

У меня трудности с тем, чтобы заставить накопительный сервер работать. Я запустил его, но он не дает никаких результатов, если OCB получит, например, новую подписку. Процесс выглядит так:

Я начинаю акк. сервер, как сказано в учебнике из недавно клонированного репо OCB. В результате я получаю в консоли:

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 работает как контейнер в Docker, который установлен в LUbuntu, и работает очень хорошо. Это может быть моя ошибка, потому что я использую Insomnia для связи с OCB и могу что-то смешать, но ответ от OCB - все в порядке. Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: Acc. Сервер не работает. Я получил:

*   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/ накопить).

Что касается подписки, я размещаю эту полезную нагрузку:

  {
  "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
}

на локальный хост:1026/v2/ подписка 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
    }
]

Я думаю, что он не сможет, потому что не отправил уведомление, но я не уверен.

2 ответа

Решение

Сервер накопления должен быть запущен на доступном физическом интерфейсе. Проще говоря, взаимодействие с использованием петлевого интерфейса с Orion Context Broker, работающим в качестве контейнера Docker, практически невозможно. Конечно, насколько виртуализация хоста работает на месте (как в моей ситуации).

Доступные интерфейсы могут быть проверены в Linux с помощью

    ip addr

После выбора того, который соответствует нашим требованиям, мы запускаем аккумулятор, как уже было сказано ранее, однако IP-адрес для него - тот, который мы выбираем. Затем мы добавляем подписку в OCB, используя адрес, используемый при запуске акк. Сервер и все хорошо, общение в порядке.

Я вижу две проблемы здесь.

Во-первых, аккумулятор не работает. Возможно, это странная проблема с сетью, которая объединяет поиск имени IPv4 (т.е. curl localhost:1028/accumulate решается как curl 127.0.0.1:1028/accumulate ОС) с аккумулятором, слушающим только в интерфейсе IPv6 (т.е. только в ::1 но не в 127.0.0.1). Я так понимаю, вы запускаете команду curl на том же хосте, где слушает аккумулятор, не так ли?

Я рекомендую играть с --host параметр накопителя (ее --host 127.0.0.1) и используйте прямой IP в команде curl, чтобы она работала.

Вторая проблема связана с тем, что вы используете localhost в качестве конечной точки уведомления:

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

Это означает, что порт 1028 находится внутри док-контейнера, где работает Orion. Однако, насколько я понимаю, ваш сервер-аккумулятор работает вне контейнера, в хосте контейнеров. Таким образом, вы должны использовать IP-адрес, который позволяет вам получить доступ к хосту из контейнера (и убедиться, что нет блокировщика сетевого трафика, например, брандмауэр). Итак, ваш вопрос здесь переводится как "Как добраться до хоста Docker-контейнеров из Docket-контейнера" (я не уверен в ответе, но там должно быть довольно много литературы по этой теме:)

Другие вопросы по тегам