LoginSignup
2
5

More than 5 years have passed since last update.

NiFi JSONファイルのリクエストを受け付ける

Last updated at Posted at 2016-04-17

RESTクライアントが送信したJSONファイルをNiFiで受ける方法です。
この例では、受け取った後JSONをパースして、それによって条件分岐もさせています。

HTTPコンテキストを用意する

画面右上のController Settingsをクリックする。
image

右上の+ボタンをクリックし、StandardHttpContextMapを選択して追加する。

image

これだけです :frowning: Webサーバ立てたりとか一切不要。

HTTPリクエストのリスナーを作る

ProcessorアイコンをCanvasにドラッグ&ドロップしてHandleHttpRequestを選択。
image

Propertyは以下のように設定します。
image
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を選択する。
image
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を選択する。
image
Attributeを追加する。Propertyにattribute名、valueに条件文を書きます。条件文はNiFi Expression記法に従って書きます。例ではfilenameが文字列oneを含む場合、case1にtrueが返ります。
image
さて、case1がtrueのときはPutFileにつなげたいとします。RouteOnAttributeからPutFileにドラッグします。
image
RouteOnAttributeとPutFileの間にconnectionが生成され、設定画面が表示されます。
For relationshipsにてcase1にチェックを入れます。
これでcase1がtrueのときはこのconnectionを通るようになります。
同様に、case2がtrueのときはちがうプロセッサにつなげたいのであれば、RouteOnAttributeとそのプロセッサ間をドラッグし、connectionでcase2にチェックを入れます。

テストする

ツールはいろいろあるようですが、RestClientというFireFoxのアドオンが便利です。
image

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5