2015-10-06 74 views
3

我上Fiware实例安装天鹅版本0.8.2基础图像的CentOS-7-64使用:天鹅:坏HTTP通知(不支持卷曲/ 7.29.0用户代理)

sudo yum install cygnus 

我配置我的代理人如下所示:

cygnusagent.sources = http-source 
cygnusagent.sinks = mongo-sink 
cygnusagent.channels = mongo-channel 

#============================================= 
# source configuration 
# channel name where to write the notification events 
cygnusagent.sources.http-source.channels = mongo-channel 
# source class, must not be changed 
cygnusagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource 
# listening port the Flume source will use for receiving incoming notifications 
cygnusagent.sources.http-source.port = 5050 
# Flume handler that will parse the notifications, must not be changed 
cygnusagent.sources.http-source.handler = com.telefonica.iot.cygnus.handlers.OrionRestHandler 
# URL target 
cygnusagent.sources.http-source.handler.notification_target = /notify 
# Default service (service semantic depends on the persistence sink) 
cygnusagent.sources.http-source.handler.default_service = def_serv 
# Default service path (service path semantic depends on the persistence sink) 
cygnusagent.sources.http-source.handler.default_service_path = def_servpath 
# Number of channel re-injection retries before a Flume event is definitely discarded (-1 means infinite retries) 
cygnusagent.sources.http-source.handler.events_ttl = 10 
# Source interceptors, do not change 
cygnusagent.sources.http-source.interceptors = ts gi 
# TimestampInterceptor, do not change 
cygnusagent.sources.http-source.interceptors.ts.type = timestamp 
# GroupinInterceptor, do not change 
cygnusagent.sources.http-source.interceptors.gi.type = com.telefonica.iot.cygnus.interceptors.GroupingInterceptor$Builder 
# Grouping rules for the GroupingInterceptor, put the right absolute path to the file if necessary 
# See the doc/design/interceptors document for more details 
cygnusagent.sources.http-source.interceptors.gi.grouping_rules_conf_file = /usr/cygnus/conf/grouping_rules.conf 

# ============================================ 
# OrionMongoSink configuration 
# sink class, must not be changed 
cygnusagent.sinks.mongo-sink.type = com.telefonica.iot.cygnus.sinks.OrionMongoSink 
# channel name from where to read notification events 
cygnusagent.sinks.mongo-sink.channel = mongo-channel 
# FQDN/IP:port where the MongoDB server runs (standalone case) or comma-separated list of FQDN/IP:port pairs where the MongoDB replica set members run 
cygnusagent.sinks.mongo-sink.mongo_hosts = 127.0.0.1:27017 
# a valid user in the MongoDB server (or empty if authentication is not enabled in MongoDB) 
cygnusagent.sinks.mongo-sink.mongo_username = 
# password for the user above (or empty if authentication is not enabled in MongoDB) 
cygnusagent.sinks.mongo-sink.mongo_password = 
# prefix for the MongoDB databases 
cygnusagent.sinks.mongo-sink.db_prefix = kura_ 
# prefix pro the MongoDB collections 
cygnusagent.sinks.mongo-sink.collection_prefix = kura_ 
# true is collection names are based on a hash, false for human redable collections 
cygnusagent.sinks.mongo-sink.should_hash = false 

#============================================= 
# mongo-channel configuration 
# channel type (must not be changed) 
cygnusagent.channels.mongo-channel.type = memory 
# capacity of the channel 
cygnusagent.channels.mongo-channel.capacity = 1000 
# amount of bytes that can be sent per transaction 
cygnusagent.channels.mongo-channel.transactionCapacity = 100 

我试图测试它在本地使用以下卷曲命令:

URL=$1 

curl $URL -v -s -S --header 'Content-Type: application/json' --header 'Accept: application/json' --header "Fiware-Service: qsg" --header "Fiware-ServicePath: testsink" -d @- <<EOF 
{ 
    "subscriptionId" : "51c0ac9ed714fb3b37d7d5a8", 
    "originator" : "localhost", 
    "contextResponses" : [ 
     { 
      "contextElement" : { 
       "attributes" : [ 
        { 
         "name" : "temperature", 
         "type" : "float", 
         "value" : "26.5" 
        } 
       ], 
       "type" : "Room", 
       "isPattern" : "false", 
       "id" : "Room1" 
      }, 
      "statusCode" : { 
       "code" : "200", 
       "reasonPhrase" : "OK" 
      } 
     } 
    ] 
} 
EOF 

但我得到这个异常:

2015-10-06 14:38:50,138 ([email protected]) [INFO - com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents(OrionRestHandler.java:150)] Starting transaction (1444142307-244-0000000000) 
2015-10-06 14:38:50,140 ([email protected]) [WARN - com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents(OrionRestHandler.java:180)] Bad HTTP notification (curl/7.29.0 user agent not supported) 
2015-10-06 14:38:50,140 ([email protected]) [WARN - org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost(HTTPSource.java:186)] Received bad request from client. 
org.apache.flume.source.http.HTTPBadRequestException: curl/7.29.0 user agent not supported 
    at com.telefonica.iot.cygnus.handlers.OrionRestHandler.getEvents(OrionRestHandler.java:181) 
    at org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost(HTTPSource.java:184) 
    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) 

的什么都可以此异常的原因你知道吗?

回答

1

天鹅座版本< = 0.8.2控制HTTP标头,只接受以orion开头的用户标识。这已被固定在0.9.0(这是特定的issue)。因此,您有两种选择:

  • 避免发送这样的用户代理报头。根据curl文档,您可以使用-A, --user-agent <agent string>选项来修改用户代理并发送以orion开头的内容(例如orion/0.24.0)。
  • 转移到Cygnus 0.9.0(为了避免您必须从源代码安装,我将在FIWARE回购中每天上传一个RPM)。