2016-04-14 3 views
2

Я использую Fiware-Orion ContextBroker 0.28, докционированную версию в моем локальном хосте на ubuntu 15.10 64 бит.Подписки, похоже, не работают с помощью докционированного флеш-ориона

$ curl localhost:1026/version 
{ 
    "orion" : { 
    "version" : "0.28.0-next", 
    "uptime" : "0 d, 0 h, 0 m, 6 s", 
    "git_hash" : "067e13618c247daa4af61f82d7831f3015d9eb5d", 
    "compile_time" : "Mon Mar 14 13:04:02 UTC 2016", 
    "compiled_by" : "root", 
    "compiled_in" : "838a42ae8431" 
} 
} 

Конфигурация докер я использую:

$ cat docker-compose.yml 
mongo: 
    image: mongo:2.6 
    command: --smallfiles --nojournal 
orion: 
    image: fiware/orion 
    links: 
    - mongo 
    ports: 
    - "1026:1026" 
    command: -dbhost mongo 

Предупреждение я получаю от ORION/грузчика, когда я делаю подписки:

orion_1 | [email protected]:19:14 AlarmManager.cpp[303]: Raising alarm NotificationError localhost:1028/accumulate: (curl_easy_perform failed: Couldn't connect to server) 

Я вслед за API V1 walkthorugh для проверки подписки на изменения. Я начинаю с монетного двора, нового докционированного (sudo docker-compose up and all the fuzz) fiware-orion 0.28 с mongodb. Затем я начинаю аккумулятор

$ ./accumulator-server.py 1028 /accumulate localhost on 
verbose mode is on 
* Running on http://localhost:1028/ (Press CTRL+C to quit) 

Тогда я зарегистрировать Room1

$ (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \ 
>  --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF 
> { 
>  "contextElements": [ 
>   { 
>    "type": "Room", 
>    "isPattern": "false", 
>    "id": "Room1", 
>    "attributes": [ 
>     { 
>      "name": "temperature", 
>      "type": "float", 
>      "value": "23" 
>     }, 
>     { 
>      "name": "pressure", 
>      "type": "integer", 
>      "value": "720" 
>     } 
>    ] 
>   } 
>  ], 
>  "updateAction": "APPEND" 
> } 
> EOF 
{ 
    "contextResponses": [ 
     { 
      "contextElement": { 
       "attributes": [ 
        { 
         "name": "temperature", 
         "type": "float", 
         "value": "" 
        }, 
        { 
         "name": "pressure", 
         "type": "integer", 
         "value": "" 
        } 
       ], 
       "id": "Room1", 
       "isPattern": "false", 
       "type": "Room" 
      }, 
      "statusCode": { 
       "code": "200", 
       "reasonPhrase": "OK" 
      } 
     } 
    ] 
} 

Затем я проверяю контекст запроса просто проверить:

$ (curl localhost:1026/v1/queryContext -s -S --header 'Content-Type: application/json' \ 
>  --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF 
> { 
>  "entities": [ 
>   { 
>    "type": "Room", 
>    "isPattern": "false", 
>    "id": "Room1" 
>   } 
>  ] 
> } 
> EOF 
{ 
    "contextResponses": [ 
     { 
      "contextElement": { 
       "attributes": [ 
        { 
         "name": "pressure", 
         "type": "integer", 
         "value": "720" 
        }, 
        { 
         "name": "temperature", 
         "type": "float", 
         "value": "23" 
        } 
       ], 
       "id": "Room1", 
       "isPattern": "false", 
       "type": "Room" 
      }, 
      "statusCode": { 
       "code": "200", 
       "reasonPhrase": "OK" 
      } 
     } 
    ] 
} 

Тогда я подписка

$ (curl localhost:1026/v1/subscribeContext -s -S --header 'Content-Type: application/json' \ 
>  --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF 
> { 
>  "entities": [ 
>   { 
>    "type": "Room", 
>    "isPattern": "false", 
>    "id": "Room1" 
>   } 
>  ], 
>  "attributes": [ 
>   "pressure" 
>  ], 
>  "reference": "http://localhost:1028/accumulate", 
>  "duration": "P1M", 
>  "notifyConditions": [ 
>   { 
>    "type": "ONCHANGE", 
>    "condValues": [ 
>     "pressure" 
>    ] 
>   } 
>  ], 
>  "throttling": "PT5S" 
> } 
> EOF 
{ 
    "subscribeResponse": { 
     "duration": "P1M", 
     "subscriptionId": "570f8ac247fcf8a62722353c", 
     "throttling": "PT5S" 
    } 
} 

В этот момент мужчина ual говорит, что аккумулятор может получить первое обновление, но это не требуется, поэтому я ничего не получаю, но, возможно, это нормально. Или, может быть, нет, потому что после отправки подписки запрос, докер Ориона говорит:

orion_1 | [email protected]:19:14 AlarmManager.cpp[303]: Raising alarm NotificationError localhost:1028/accumulate: (curl_easy_perform failed: Couldn't connect to server) 

Наконец я обновить объект, и я должен получить обновление на аккумуляторе, но я не делаю

$ (curl localhost:1026/v1/updateContext -s -S --header 'Content-Type: application/json' \ 
>  --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF 
> { 
>  "contextElements": [ 
>   { 
>    "type": "Room", 
>    "isPattern": "false", 
>    "id": "Room1", 
>    "attributes": [ 
>     { 
>      "name": "temperature", 
>      "type": "float", 
>      "value": "56.5" 
>     }, 
>     { 
>      "name": "pressure", 
>      "type": "integer", 
>      "value": "553" 
>     } 
>    ] 
>   } 
>  ], 
>  "updateAction": "UPDATE" 
> } 
> EOF 
{ 
    "contextResponses": [ 
     { 
      "contextElement": { 
       "attributes": [ 
        { 
         "name": "temperature", 
         "type": "float", 
         "value": "" 
        }, 
        { 
         "name": "pressure", 
         "type": "integer", 
         "value": "" 
        } 
       ], 
       "id": "Room1", 
       "isPattern": "false", 
       "type": "Room" 
      }, 
      "statusCode": { 
       "code": "200", 
       "reasonPhrase": "OK" 
      } 
     } 
    ] 
} 

Я также должен сказать, что компиляция на Ubuntu довольно сложно, и именно по этой причине я использую докер.

+0

Компиляция Orion поддерживается только CentOS, хотя это не должно быть слишком сложно сделать на Ubuntu с незначительными изменениями. – LeandroGuillen

ответ

2

Возможно, вам придется изменить URL целевой подписки (атрибут «ссылка»). Если вы используете Orion внутри Docker, localhost для Orion - это сам докер, а не ваш компьютер. Таким образом, уведомления поднимаются на локальный порт Docker 1028. Как возможно, не может присутствовать какое-либо приложение, прослушивающее порт Docker 1028, вы получаете ошибку curl.

Попробуйте установить накопительный сервер на другом компьютере или создайте туннель для локального хоста вашего компьютера (например, с помощью ngrok) и установите ссылку на подписку на этот адрес.

3

Похоже, что ответ на ifconfig.

$ ifconfig 
docker0 Link encap:Ethernet HWaddr 02:42:09:7b:6e:b7 
      inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 
      inet6 addr: fe80::42:9ff:fe7b:6eb7/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:1036 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:1506 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 

Это означает, что для машины-докера, хост находится на 172.17.0.1.

Аккумулятор следует начинать с:

$ ./accumulator-server.py 1028 /accumulate 172.17.0.1 on 

Команда подписавшись должно быть что-то вроде (с помощью "ссылки": "http://172.17.0.1:1028/accumulate"):

(curl localhost:1026/v1/subscribeContext -s -S --header 'Content-Type: application/json' \ 
    --header 'Accept: application/json' -d @- | python -mjson.tool) <<EOF 
{ 
    "entities": [ 
     { 
      "type": "Room", 
      "isPattern": "false", 
      "id": "Room1" 
     } 
    ], 
    "attributes": [ 
     "temperature", 
     "pressure" 
    ], 
    "reference": "http://172.17.0.1:1028/accumulate", 
    "duration": "P1M", 
    "notifyConditions": [ 
     { 
      "type": "ONCHANGE", 
      "condValues": [ 
       "temperature", 
       "pressure" 
      ] 
     } 
    ], 
    "throttling": "PT1S" 
} 
EOF 

По крайней мере, это решение работает для меня

Смежные вопросы