Сервер накопления - никаких действий
У меня трудности с тем, чтобы заставить накопительный сервер работать. Я запустил его, но он не дает никаких результатов, если 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-контейнера" (я не уверен в ответе, но там должно быть довольно много литературы по этой теме:)