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-correlator は transaction-id ヘッダと等しくなります |
transaction-id ヘッダ (内部追加) |
|
他のヘッダ | 廃棄 |
ペイロード | ペイロードの解析済みバージョンを含む ContextElement オブジェクト |
通知された場合、すべての FIWARE ヘッダが NGSIEvent
オブジェクトに追加されます。そうでない場合は、デフォルト値が使用される (fiware-service
と fiware-servicepath
の場合、default_service
と default_service_path
の設定値をそれぞれ取ります。設定セクションの下を参照してください)かまたは、自動生成されます(fiware-correlator
の場合、その値は transaction-id
と同じです)。
すでに紹介したように,、fiware-correlator
に加えて、完全な Cygnus トランザクションを内部的に識別するために、transaction-id
が作成されます。コンテキストデータが通知されたときにソースから開始し、そのようなデータが最後に保持されるシンクで終了します。fiware-Correlator
ヘッダが通知されない場合、fiware-correlator
と transactionid
は同じ自動生成値を取得します。
最後に、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-8
の Content-Type
ヘッダを送信する必要があります。その他のコンテンツタイプは考慮されず、通知は破棄されます。
この種のエンコーディングを適切に指定することによって、最後のシンク(またはバックエンドの抽象概念が存在する場合)が writes/inserts/upserts を構成するように、コンフィギュレーション内のすべての Flume 要素によって UTF-8 文字セットが維持されることが期待されます。
プログラマ・ガイド¶
NGSIRestHandler
クラス¶
未定