NGSIRestHandler

コンテンツ :

機能性

`NGSIEvent オブジェクトへの NGSI イベントのマッピング

この節では、NGSIRestHandler のおかげで、通知された NGSI イベント(ヘッダとペイロードを含む http メッセージ)を使用して、Cygnusシンクによって、消費に適した NGSIEvent オブジェクトを作成する方法について説明します。

このハンドラは、Apache Flume のネイティブ・コンポーネントである HttpSource によって使用されるように設計されています。NGSI ライクの通知を含む http メッセージは、HttpSource によって受信され、NGSIRestHandler に渡されてシンクのチャネルに入れられる1つまたは複数の NGSIEvent オブジェクト(通知されたコンテキスト要素あたり1つ)を作成すします。主に、これらのチャネルはメモリ内のオブジェクトですが、ファイルである可能性があります。

一方では、NGSI ライクの通知を含む http メッセージは、http ヘッダのセットとペイロードで構成されます。一方、NGSIEvent オブジェクトは、ヘッダのセットと、通知内のコンテキスト要素の既に解析されたバージョンを含む型のオブジェクト ContextElement で構成されます。この通知されたボディの解析されたバージョンは、インターセプタやシンクなど、エージェント・アーキテクチャ内の他のコンポーネントによって消費される準備ができており、解析は1回だけ行われます。

見て分かるように、http メッセージと NGSIEvent オブジェクトの間に準直接変換 (quasi-direct translation) があります :

http message NGSIEvent オブジェクト
Fiware-Service ヘッダ fiware-service ヘッダ
 Fiware-ServicePath ヘッダ fiware-servicepath ヘッダ
 Fiware-Correlator ヘッダ fiware-correlator ヘッダ. このヘッダが送信されない場合、fiware-correlatortransaction-id ヘッダと等しくなります
transaction-id ヘッダ (内部追加)
他のヘッダ 廃棄
 ペイロード ペイロードの解析済みバージョンを含む ContextElement オブジェクト

通知された場合、すべての FIWARE ヘッダが NGSIEvent オブジェクトに追加されます。そうでない場合は、デフォルト値が使用される (fiware-servicefiware-servicepath の場合、default_servicedefault_service_path の設定値をそれぞれ取ります。設定セクションの下を参照してください)かまたは、自動生成されます(fiware-correlator の場合、その値は transaction-id と同じです)。

すでに紹介したように,、fiware-correlator に加えて、完全な Cygnus トランザクションを内部的に識別するために、transaction-id が作成されます。コンテキストデータが通知されたときにソースから開始し、そのようなデータが最後に保持されるシンクで終了します。fiware-Correlator ヘッダが通知されない場合、fiware-correlatortransactionid は同じ自動生成値を取得します。

最後に、NGSIEVent には、NGSINameMappingsInterceptor がこのハンドラによって追加された元のコンテキスト要素のマップされたバージョンを追加するために、ContextElement 型の別のフィールドも含まれている必要があります。

トップ

受け取った通知に関する以下の非インターセプト・イベントを想定してみましょう。以下のコードは実際のデータフォーマットではなくオブジェクト表現です :

notification={
   headers={
       fiware-service=hotel1,
       fiware-servicepath=/other,/suites,
       correlation-id=1234567890-0000-1234567890
   },
   body={
      {
          entityId=suite.12,
          entityType=room,
          attributes=[
             ...
          ]
       },
       {
          entityId=other.9,
          entityType=room,
          attributes=[
             ...
          ]
       }
    }
}

見て分かるように、同じ FIWARE service(hotel)内の同じタイプ(room)の2つのエンティティ(suite.12 および other.9)が、異なるサービスパス(/suites および /other)に通知されます。NGSIRestHandler は2つの NGSIEvent を作成します :

ngsi-event-1={
   headers={
       fiware-service=hotel,
       fiware-servicepath=/suites,
       transaction-id=1234567890-0000-1234567890,
       correlation-id=1234567890-0000-1234567890,
       timestamp=1234567890,
       mapped-fiware-service=hotel
       mapped-fiware-service-path=/suites
    },
   original-context-element={
       entityId=suite.12,
       entityType=room,
       attributes=[
          ...
       ]
    }
}

ngsi-event-2={
   headers={
       fiware-service=hotel,
       fiware-servicepath=/other,
       transaction-id=1234567890-0000-1234567890,
       correlation-id=1234567890-0000-1234567890,
       timestamp=1234567890,
       mapped-fiware-service=hotel
       mapped-fiware-service-path=/other
   },
   original-context-element={
       entityId=other.9,
       entityType=room,
       attributes=[
          ...
       ]
    }
}

トップ

管理ガイド

構成

NGSIRestHandler は、次のパラメータによって構成されます :

パラメータ 必須 デフォルト値 コメント
notification_target  no notify/ 他の設定値は / で始まる必要があります
default_service no default 英数字とアンダースコアは受け入れられます
default_service_path no / / は、ルートサービスパスです。ルート・サブサービスとしても知られています。他の設定値は / で始まる必要があります。最初のスラッシュとは別に、英数字とアンダースコアは受け入れられます

設定例は、次のとおりです :

cygnus-ngsi.sources = http-source
...
cygnus-ngsi.sources.http-source.handler = com.telefonica.iot.cygnus.handlers.NGSIRestHandler
cygnus-ngsi.sources.http-source.notification_target = /notify
cygnus-ngsi.sources.http-source.default_service = default
cygnus-ngsi.sources.http-source.default_service_path = /

トップ

受け入れられる文字セット

NGSI 用のハンドラは、UTF-8 エンコーディングでのみ動作します。したがって、通知は、値として application/json; charset=utf-8Content-Type ヘッダを送信する必要があります。その他のコンテンツタイプは考慮されず、通知は破棄されます。

この種のエンコーディングを適切に指定することによって、最後のシンク(またはバックエンドの抽象概念が存在する場合)が writes/inserts/upserts を構成するように、コンフィギュレーション内のすべての Flume 要素によって UTF-8 文字セットが維持されることが期待されます。

トップ

プログラマ・ガイド

NGSIRestHandler クラス

未定

トップ