Fiware - контекстный брокер: проблема с подписками NGSIv2

Я работаю с брокером контекста Orion версии 1.2.0. Я подписал в нем два разных лебедя (0,11 и 0,13), используя NGSIv2, следующим образом:

(curl 172.21.0.23:1026/v2/subscriptions -s -S --header 'Fiware-Service: prueba_015_adapter' --header 'Fiware-ServicePath: /Prueba/Planta_3' --header 'Content-Type: application/json' -d @- ) <<EOF
{
    "description": "Cygnus subscription",
    "subject": {
        "entities": [
            {
                "idPattern": ".*",
                "type": "density_algorithm"
            }
        ],
        "condition": {
            "attrs": []
        }
    },
    "notification": {
        "http": {
            "url": "http://172.21.0.33:5050/notify"
        },
        "attrs": []
    }
}    
EOF

Но когда брокер контекста отправляет уведомление любому из этих модулей cygnus, в журнале появляется следующая ошибка:

15 jun 2016 12:46:48,641 INFO  [1469152682@qtp-857344131-3153] (com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents:150)  - Starting transaction (1463998603-759-0001644173) 15 jun 2016 12:46:48,641 INFO  [1469152682@qtp-857344131-3153] (com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents:232)  - Received data ({"subscriptionId":"57612ed9efa20b5b23e71bd5","data":[{"id":"C-A2","type":"density_algorithm","densityPlan":{"type":"string","value":"C-A2","metadata":{}},"devices":{"type":"string","value":"43","metadata":{}},"timestamp":{"type":"string","value":"2016-06-15T12:53:26.294+02:00","metadata":{}}}]}) 15 jun 2016 12:46:48,641 INFO  [1469152682@qtp-857344131-3153] (com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents:255)  - Event put in the channel (id=957931298, ttl=-1) 15 jun 2016 12:46:48,642 WARN  [1469152682@qtp-857344131-3153] (com.telefonica.iot.cygnus.interceptors.GroupingInterceptor.intercept:289)
- No context responses within the notified entity, nothing is done 15 jun 2016 12:46:48,642 WARN  [1469152682@qtp-857344131-3153] (org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost:203) 
- Error appending event to channel. Channel might be full. Consider increasing the channel capacity or make sure the sinks perform faster. org.apache.flume.ChannelException: Unable to put batch on required channel: org.apache.flume.channel.MemoryChannel{name: mongo-channel}
        at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:200)
        at org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost(HTTPSource.java:201)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:814)
        at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
        at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
        at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
        at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
        at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
        at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
        at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: java.lang.IllegalArgumentException: put() called with null event!
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88)
        at org.apache.flume.channel.BasicTransactionSemantics.put(BasicTransactionSemantics.java:89)
        at org.apache.flume.channel.BasicChannelSemantics.put(BasicChannelSemantics.java:80)
        at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:189)
        ... 16 more

Если я использую NGSIv1 вместо регистрации обеих подписок, все идет нормально: ошибки журнала не отображаются, и данные сохраняются в обоих модулях cygnus.

(curl 172.21.0.23:1026/v1/subscribeContext -s -S --header 'Fiware-Service: prueba_015_adapter' --header 'Fiware-ServicePath: /Prueba/Planta_3' --header 'Content-Type: application/json' --header 'Accept: application/json' -d  @- ) <<EOF
{
    "entities": [
        {
            "type": "density_algorithm",
            "isPattern": "true",
            "id": ".*"
        }
    ],
    "attributes": [],
    "reference": "http://172.21.0.33:5050/notify",
    "duration": "P1M",
    "notifyConditions": [
        {
            "type": "ONCHANGE",
            "condValues": []
        }
    ]
}
EOF

Я отправляю объекты контекстному брокеру, используя NGSIv1. Может ли проблема быть из-за несовместимости между NGSIv1 и NGSIv2?

заранее спасибо


person Julen    schedule 15.06.2016    source источник


Ответы (1)


В настоящее время в Cygnus не поддерживаются уведомления NGSIv2. Ожидается, что он будет реализован, но это еще не запланировано.

Однако вы можете использовать attrFormat (внутри поля nofitication), равное legacy, чтобы использовать формат уведомлений NGSIv1 (см. Более подробную информацию здесь). Формат уведомлений NGSIv1 полностью поддерживается Cygnus, так что это должно работать.

person fgalan    schedule 16.06.2016
comment
Ответ аналогичен ответу в этом вопросе stackoverflow.com/questions/37114255/why-cygnus-crashes-when-using-ngsiv2-in-orion, что, возможно, вы найдете также полезным. - person fgalan; 16.06.2016