Нужен ли какой-либо прокси, чтобы сделать провайдер контекста видимым с помощью посредника контекста FIWARE Orion? - PullRequest
0 голосов
/ 06 декабря 2018

Я не могу получить атрибут от зарегистрированного поставщика контекста в Orion Context Broker, установленного из докера.Нужно ли мне что-то еще (например, специальный контекстный прокси?)


SETUP

У меня есть весь Orion Context Broker, который полностью настроен и работает после выполнения следующих команд:

docker pull mongo:3.6
docker pull fiware/orion
docker network create fiware_default

docker run -d --name=mongo-db --network=fiware_default \
  --expose=27017 mongo:3.6 --bind_ip_all --smallfiles
docker run -d --name fiware-orion -h orion --network=fiware_default \
  -p 1026:1026  fiware/orion -dbhost mongo-db

ENTITIES

Я также добавил одну сущность Store (из учебника https://github.com/Fiware/tutorials.Getting-Started), выполнив:

    curl -iX POST \
  'http://localhost:1026/v2/entities' \
  -H 'Content-Type: application/json' \
  -d '
{
    "id": "urn:ngsi-ld:Store:001",
    "type": "Store",
    "address": {
        "type": "PostalAddress",
        "value": {
            "streetAddress": "Bornholmer Straße 65",
            "addressRegion": "Berlin",
            "addressLocality": "Prenzlauer Berg",
            "postalCode": "10439"
        }
    },
    "location": {
        "type": "geo:json",
        "value": {
             "type": "Point",
             "coordinates": [13.3986, 52.5547]
        }
    },
    "name": {
        "type": "Text",
        "value": "Bösebrücke Einkauf"
    }
}'

Кроме того, я также успешно зарегистрировал своего провайдера контекста:

    curl -iX POST   'http://localhost:1026/v2/registrations'   -H 'Content-Type: application/json'   -d '{
  "description": "Temperature Provider",
  "dataProvided": {
    "entities": [
      {         
        "id": "urn:ngsi-ld:Store:001",
        "type": "Store"
      }                                             
    ],                                
    "attrs": [                                   
      "temperature"
    ]    
  },
  "provider": {
    "http": {
      "url": "http://192.168.xxx.xxx:8080/temperature"
    },                       
     "legacyForwarding": true
  }      
}'

КОНТЕКСТНЫЙ ПРОВАЙДЕР

Я локально представил свой провайдер контекста (предоставляемый моим приложением SpringBoot, написанным на Java 10) на http://192.168.xxx.xxx:8080/temperature. Данные JSON (возвращенные в формате html)body) в формате NSGI v1 и выглядит следующим образом:

{
  "contextResponses": [
    {
      "contextElement": {
        "attributes": [
          {
            "name": "temperature",
            "type": "float",
            "value": "16"
          }
        ],
        "id": "urn:ngsi-ld:Store:001",
        "isPattern": "false",
        "type": "Store"
      },
      "statusCode": {
        "code": "200",
        "reasonPhrase": "OK"
      }
    }
  ]
}

ПРОБЛЕМА

Когда я пытаюсь получить атрибуты другого объекта (например, имя), он работает нормально, но когда япопытаться получить атрибут температуры с помощью этого запроса:

curl -X GET   'http://192.168.xxx.xxx:1026/v2/entities/urn:ngsi-ld:Store:001/attrs/temperature/value'

Я получаю следующую ошибку:

{"error":"NotFound","description":"The entity does not have such an attribute"}

Журналы в докере Context Broker:

time=2018-12-07T09:18:02.846Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=AlarmManager.cpp[405]:badInput | msg=Raising alarm BadInput 192.168.115.126: JSON Parse Error: unknown field: /timestamp
time=2018-12-07T09:18:02.847Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=postQueryContext.cpp[196]:queryForward | msg=Internal Error (error parsing reply from prov app: )

DoМне нужно что-то большее в моей настройке, чтобы этот провайдер контекста работал (например,иал контекст прокси)?

1 Ответ

0 голосов
/ 10 декабря 2018

Ладно, это заняло у меня некоторое время, но я нашел ответ.Прокси не нужен в этом случае.

Брокер контекста делает не GET, а POST-запрос и не на указанный URL-адрес, а на URL-адрес + "/ queryContext".Я изменил свой REST-клиент, и теперь он отлично работает для меня.

...