RESTクライアントが送信したJSONファイルをNiFiで受ける方法です。
この例では、受け取った後JSONをパースして、それによって条件分岐もさせています。
HTTPコンテキストを用意する
画面右上のController Settingsをクリックする。
右上の+ボタンをクリックし、StandardHttpContextMapを選択して追加する。
これだけです Webサーバ立てたりとか一切不要。
HTTPリクエストのリスナーを作る
ProcessorアイコンをCanvasにドラッグ&ドロップしてHandleHttpRequestを選択。
Propertyは以下のように設定します。
Listening Port: クライアントがアクセスしてくるポートを決めて入力
HTTP Context Map: さきほど作成したHTTPコンテキストを選択
Allowed Paths: クライアントがアクセスできるURLはhttp://:<さっき指定したポート番号>/<ここに指定したパス> になる。|で区切って複数指定できる。
Allow GET,PPOST... : AcceptするHTTPメソッドをtrueにする
Client Authentication : (あとで追記します)
JSONパーサを作る
受け付けたJSONをパースしてNiFiのattributeに格納します。
さきほどと同様ProcessorをCanvasにドラッグ&ドロップして、EvaluateJsonPathを選択する。
Destination : flowfile-attributeでJSONの値がNiFiのAttributeに格納されます。Attributeを追加してやる必要があります(後述)
太字のは画像のように設定して、右上の+(New Property)をクリック
図ではattribute1, attribute2がAttribute名、$.json_name1, $.json_name2($.以降)がJSONのNameになります。
たとえばJSONで
{
"json_name1":"json_value1",
"json_name2":"json_value2"
}
こういうのが来たら、attribute1にjson_value1が、attribute2にjson_value2が格納されます。
格納したattributeで分岐させる
さきほどと同様ProcessorをCanvasにドラッグ&ドロップして、RouteOnAttributeを選択する。
Attributeを追加する。Propertyにattribute名、valueに条件文を書きます。条件文はNiFi Expression記法に従って書きます。例ではfilenameが文字列oneを含む場合、case1にtrueが返ります。
さて、case1がtrueのときはPutFileにつなげたいとします。RouteOnAttributeからPutFileにドラッグします。
RouteOnAttributeとPutFileの間にconnectionが生成され、設定画面が表示されます。
For relationshipsにてcase1にチェックを入れます。
これでcase1がtrueのときはこのconnectionを通るようになります。
同様に、case2がtrueのときはちがうプロセッサにつなげたいのであれば、RouteOnAttributeとそのプロセッサ間をドラッグし、connectionでcase2にチェックを入れます。
テストする
ツールはいろいろあるようですが、RestClientというFireFoxのアドオンが便利です。