ListenHTTP(NGSIRestHandler)¶
コンテンツ:
機能性¶
NGSI イベントを NGSIEvent
オブジェクトにマッピング¶
このセクションでは、ListenHTTP
のおかげで、通知された NGSI イベント
(ヘッダとペイロードを含む http メッセージ) が、Draco プロセッサのいずれかに
よって消費されるのに適した NGSIEvent
オブジェクトを作成するために
どのように使われるかを説明します。
このハンドラは、Apache NiFi のネイティブ・プロセッサである ListenHTTP
によって使用されるように設計されていることに再び注意する必要があります。
NGSI ライクの通知を含む http メッセージは ListenHTTP
によって受信され、
シンクのチャンネルに置かれる1つ以上のNGSIEvent
オブジェクト
(通知されたコンテキスト要素毎に1つ) を作成するために NGSIRestHandler
に渡されます。これらのチャネルはメモリ内のオブジェクトですが、
ファイルの場合もあります。
一方では、NGSI ライクの通知を含む http メッセージは、一連の http ヘッダ
とペイロードから構成されます。 一方、NGSIEvent
オブジェクトは一連の
ヘッダと、通知内のすでに解析されたバージョンのコンテキスト要素を含む
ContextElement
型のオブジェクトで構成されています。通知されたボディの
この解析済みバージョンは、インターセプターやシンクなど、
エージェント・アーキテクチャ内の他のコンポーネントによって消費される
準備ができているため、解析は1回だけ行われます。
ご覧のように、http メッセージと NGSIEvent オブジェクトの間には、 準ダイレクト変換 (quasi-direct translation) があります。
http メッセージ | NGSIEvent オブジェクト |
---|---|
Fiware-Service ヘッダ |
fiware-service ヘッダ |
Fiware-ServicePath ヘッダ |
fiware-servicepath ヘッダ |
Fiware-Correlator ヘッダ |
fiware-correlator ヘッダ。このヘッダが送信されない場合、fiware-correlator は transaction-id ヘッダと同じです |
transaction-id ヘッダ (内部追加) |
|
他のヘッダ | 廃棄 |
ペイロード | ContextElement ペイロードの解析済みバージョンを含むオブジェクト |
通知があれば、すべての FIWARE ヘッダが NGSIEvent
オブジェクトに追加されます。
そうでなければ、デフォルト値 (それぞれ default_service
と
default_service_path
の設定値をとる fiware-service
と fiware-servicepath
の場合です。設定のセクションを見てください)が使用されるか、自動生成 (これは fiware-correlator
の場合で、その値は transaction-id
と同じです)されます。
すでに紹介したように、fiware-correlator
に加えて、完全な Draco
のトランザクションを内部的に識別するために、すなわちコンテキスト・データが
通知されたときにソースから始まりシンクで終わるために transaction-id
が作成されます。データは最終的に永続化されます。Fiware-Correlator
ヘッダが通知されない場合、fiware-correlator
と transactionid
は同じ自動生成された値を取得します。
最後に、NGSIEVent
は ContextElement
型の別のフィールドも含んでいます。
NGSINameMappingsInterceptor
は、このハンドラによって追加されたオリジナルの
コンテキスト要素のマップされたバージョンを追加します。
例¶
受信した通知に関する次のインターセプトされないイベントを想定しましょう (以下のコードは オブジェクト表現 であり、実際のデータ形式ではありません)
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 サービス (hotel
) 内あるが、異なるサービス・パス
内の同じタイプ (room
) の2つエンティティ (suite.12
and other.9
) に
通知されます。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=[
...
]
}
}
管理ガイド¶
設定¶
ListenHTTP
は、次のパラメータで設定されます :
名前 | デフォルト値 | 許容値 | 説明 |
---|---|---|---|
Base Path | contentListener | 着信接続サポート (incoming connectionsSupports) のベース・パス。これは Orion 式言語で作成されたサブスクリプションの通知属性と一致する必要があります。true(変数レジストリのみを使用して評価されます) | |
Listening Port | no | 着信接続サポート (incoming connectionsSupports) をリッスンするポート、サブスクリプションに含める必要があります、式言語 : true (変数レジストリのみを使用して評価されます) | |
Max Data to Receive per Second | 1秒間に受信するデータの最大量。これにより、帯域幅を指定されたデータ・レートに制限することができます。指定しない場合、データ・レートは調整されません | ||
SSL Context Service | Controller Service API: RestrictedSSLContextServiceImplementation: StandardRestrictedSSLContextService | SSL コンテキストを取得するために使用するコントローラ・サービス | |
Authorized DN Pattern | .* | 着信接続の識別名に対して適用する正規表現。パターンが DN と一致しない場合、接続は拒否されます | |
Max Unconfirmed Flowfile Time | 60 secs | フローファイルががキャッシュから削除されるまでに確認されるのを待つ最大時間 | |
HTTP Headers to receive as Attributes (Regex) | no | フローファイル属性として渡す必要がある HTTP ヘッダの名前を決定する正規表現を指定します。少なくともFiware-service, Fiware-Service-Path およびオプションで X-Auth-Token を含める必要があります | |
Return Code | 200 | HTTP コールのたびに返される HTTP リターン・コード |
設定例は次のようになります :