ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π’Π°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Π½Π° ΠΌΠΎΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. ΠΠ°ΡΠ½Ρ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΡΠΎΡΠΈΠΈ. ΠΠ° ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΌ ΠΌΠΈΡΠΈΠ½Π³Π΅, Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ. ΠΠΎΠ΄ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ Π½Π°ΠΌ ΡΠ»Π°ΡΡ Π·Π°ΠΏΡΠΎΡΡ ΡΠ΅ΡΠ΅Π· HTTP Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π΅Π½Π΄ΠΏΠΎΠΈΠ½Ρ, Π° ΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, ΡΠ»Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΎΡΠ²Π΅ΡΡ Π² Π²ΠΈΠ΄Π΅ SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΡΠΎΠ΄Π΅ Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ. ΠΠ· ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ…
ΠΠ°Π΄Π°ΡΠ°
Π‘ΠΎΠ·Π΄Π°ΡΡ 3 ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ ΠΈΠ· Π½ΠΈΡ β Π‘Π΅ΡΠ²ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΠ. ΠΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ, ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½Π΅ΠΊΠΈΠΉ ΡΠ°ΠΉΠ» Π² ΡΠΎΡΠΌΠ°ΡΠ΅ CSV, Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΅Π½Π΄ΠΏΠΎΠΈΠ½Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° β Π‘Π΅ΡΠ²ΠΈΡΠ° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΠ΅Π· FTP, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ», Π²Π°Π»ΠΈΠ΄ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ, ΠΈ ΠΊΠ»Π°Π΄Π΅Ρ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π· FTP. Π’ΡΠ΅ΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ β Π‘Π΅ΡΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ Ρ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ Π΄Π²ΡΠΌΡ. ΠΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΎΡ ΡΡΠΎΡΠΎΠ½Π½Π΅ΠΉ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π° ΡΠ΅ΡΡ Π²ΡΡΠ΅, Π±Π΅ΡΠ΅Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» ΠΎΡΠ²Π΅ΡΠ°, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ (ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠ»Ρ id, description, linkToFile) ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ Π² Π²ΠΈΠ΄Π΅ SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. Π’ Π΅ Π² ΡΠ΅Π»ΠΎΠΌ ΠΊΠ°ΡΡΠΈΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ: ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΡΠ΅ΡΠ²ΠΈΡΠ° Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. Π’ΡΠ΅ΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΡΡΠ΄ΠΊΠ° 1000 Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΌΠΈΠ½ΡΡΡ. Π‘Π΅ΡΠ²ΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΈ ΠΈΡ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΡ, Π΄Π΅ΠΌΠΎ, ΠΏΡΠ΅ΠΏΡΠΎΠ΄ ΠΈ ΠΏΡΠΎΠ΄. ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΡ Π΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ ΡΡΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΡΠ½Ρ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠΏΡΠΎΡΠ΅Π½Ρ Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ Π»ΠΈΡΠ½Π΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ³Π»ΡΠ±Π»Π΅Π½ΠΈΠ΅
ΠΡΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅ΡΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° java Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Spring framework, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Nginx, Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Postgres ΠΈ ΠΏΡΠΎΡΠΈΠΌΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΡΡΠΊΠ°ΠΌΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, Π²Π·Π³Π»ΡΠ΄ ΡΠΏΠ°Π» Π½Π° ΠΌΠΎΠ΄Π½ΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΡΡΠ³Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Apache NIFI. Π‘ΡΠ°Π·Ρ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ ΡΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π½Π°ΠΌ ΡΡΠΈ 3 ΡΠ΅ΡΠ²ΠΈΡΠ°. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΠ°ΡΡΡ Π·Π°ΠΉΠ΄Π΅Ρ, Π½Π°ΠΏΠΈΡΡ ΠΏΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΠ.
Π§ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅
NIFI ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
, Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π΄Π»Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΡΠΈΡΡΠ½ΡΠΌ Π±ΠΎΠ½ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. Π’ΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ getFile, sendHttpRequest ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ β ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½Π°
ΠΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΡ ΡΠΎΠ΄ΠΈΠ»Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΠΏΠΎΠΈΡΠΊΠΎΠ² ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΡΠΎ-ΡΠΎ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ΅, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ Π±ΡΠ΄ΡΡΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ..
ΠΡΠΈΠΌΠ΅Ρ
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ. ΠΠ±ΡΠ°Ρ ΡΡ Π΅ΠΌΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ: ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ HTTP Π·Π°ΠΏΡΠΎΡ (Π ΡΠ΅ΠΎΡΠΈΠΈ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ NIFI, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΏΡΠΎΡ ΡΡΠ°ΡΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π€Π₯), Π΄Π°Π»Π΅Π΅ ΠΎΡΡΡΠ»Π°Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΎΡΠ²Π΅Ρ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½, ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ· Π€Π₯ ΠΈ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· FTP Π² Π€Π₯. Π‘ΡΠΎΠΈΡ ΠΏΠΎΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ flowFile. ΠΡΠΎ Π±Π°Π·ΠΎΠ²Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π² NIFI, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ β Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ°. Π’ Π΅ Π³ΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°ΠΉΠ» ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π΅Π³ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΉ, ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π²Π°Ρ ΡΠ°ΠΉΠ».
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ β Π½Π° ΡΡΠΎΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. HandleHttpRequest β ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ, ReplaceText β Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅Π»ΠΎ ΠΎΡΠ²Π΅ΡΠ°, HandleHttpResponse β ΠΎΡΠ΄Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ. FetchFile β ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ PutSftp β ΠΊΠ»Π°Π΄Π΅Ρ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π½Π° FTP, ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β request Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»ΠΎ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ΄Π΅ΡΡ Π²ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ StandartHttpContextMap β ΡΡΠΎ Π½Π΅ΠΊΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π°ΠΏΡΠΎΡΡ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ β
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ReplaceText ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°. Π Π½Π΅ΠΉ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ReplacementValue β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ²Π΅ΡΠ°. Π settings ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΠ²Π΅Π½Ρ Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π»ΠΎΠ³ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ {ΠΊΡΠ΄Π° ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ nifi}/nifi-1.9.2/logs ΡΠ°ΠΌ ΠΆΠ΅ Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ failure/success β ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΡΠ΅Π»ΠΎΠΌ. Π’ Π΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° β Π²ΡΠ·ΠΎΠ²Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π·Π°Π»ΠΎΠ³ΠΈΡΡΠ΅ΠΌ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
Π ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ HandleHttpResponse ΠΎΡΠΎΠ±ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ ΠΊΡΠΎΠΌΠ΅ ΡΡΠ°ΡΡΡΠ° ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ°.
Π‘ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΎΡΠ²Π΅ΡΠΎΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ β ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅ ΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π½Π° FTP ΡΠ΅ΡΠ²Π΅Ρ. FetchFile β ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΡΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
Π Π΄Π°Π»Π΅Π΅ ΠΊΠ²Π°Π΄ΡΠ°Ρ PutSftp β ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ°ΠΉΠ» Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΆΠ΅.
Π‘ΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ β ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΈΠΈ. ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π³Π΄Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΏΠΈΡΠ΅ΠΌ Π½Π° Π³ΡΡΠ²ΡΡ .
ΠΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
Π‘Π΅ΡΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π·Π° ΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ±ΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅.
ΠΠ΄Π΅ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΠΎ ΡΠ»ΠΎΠΆΠ½Π°Ρ: ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΎΡΠ²Π΅ΡΠ°, Π΄Π°Π»Π΅Π΅ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΡΠ°ΠΉΠ» ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π² Π²ΠΈΠ΄Π΅ SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
ΠΡΠΌΠ°Ρ Π½Π΅ ΡΡΠΎΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²ΡΡΠ΅ β ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΡΡΠ°Π·Ρ ΠΊ Π½ΠΎΠ²ΡΠΌ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΡΠ°ΠΉΠ» ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ ΡΠΈΠΏΠ° ReplaceText Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΊΡΠΈΠΏΡ. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° ExecuteGroogyScript. ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½ΠΈΠΆΠ΅.
ΠΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠΊΡΠΈΠΏΡΠ° Π² ΡΡΠΎΡ ΠΊΠ²Π°Π΄ΡΠ°Ρ. ΠΠ΅ΡΠ²ΡΠΉ β ΡΡΠΎ ΠΏΡΡΠ΅ΠΌ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»Π° ΡΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠΌ. ΠΡΠΎΡΠΎΠΉ β Π²ΡΡΠ°Π²ΠΊΠΎΠΉ ΡΠΊΡΠΈΠΏΡΠ° Π² scriptBody. ΠΠ° ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π·Π½Π°Ρ, ΠΊΠ²Π°Π΄ΡΠ°Ρ executeScript ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π―Π β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ groovy. Π Π°Π·ΠΎΡΠ°ΡΡΡ java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² β Π½Π° java Π½Π΅Π»ΡΠ·Ρ ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ Π² ΡΠ°ΠΊΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°Ρ . ΠΠ»Ρ ΡΠ΅Ρ ΠΊΠΎΠΌΡ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠ΅ΡΡΡ β Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΈ ΠΏΠΎΠ΄ΠΊΠΈΠ½ΡΡΡ Π΅Π³ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΡ NIFI. ΠΡΡ ΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ°Π½ΡΠ°ΠΌΠΈ Ρ Π±ΡΠ±Π½ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ. Π― Π²ΡΠ±ΡΠ°Π»Π° ΡΠ·ΡΠΊ groovy. ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ id Π² SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ. ΠΡ Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ°ΠΉΠ» ΠΈΠ· flowFile ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΠ΅ Π΅Π³ΠΎ, Π½Π΅ ΡΡΠΎΠΈΡ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ, ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΡΡΠ΄Π° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ. Π’Π°ΠΊ ΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ. ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ Π²Π°ΠΌ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· Π»ΠΈΠ±. ΠΠΈΠ½ΡΡΠΎΠΌ Π΅ΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΄Π½ΠΎ Π΄Π΅Π±Π°ΠΆΠΈΡΡ. ΠΡΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ JVM NIFI ΠΈ Π½Π°ΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΠΈΡΠ½ΠΎ Ρ Π·Π°ΠΏΡΡΠΊΠ°Π»Π° Ρ ΡΠ΅Π±Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°Π»Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈΠ· ΡΠ΅ΡΡΠΈΠΈ. ΠΡΠ»Π°Π΄ΠΊΠΎΠΉ ΡΠΎΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π»Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ. ΠΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ»Π΅Π·Π°ΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π³ΡΠ³Π»ΡΡΡΡΡ ΠΈ ΠΏΠΈΡΡΡΡΡ ΡΠ°ΠΌΠΈΠΌ NIFI Π² Π»ΠΎΠ³.
import org.apache.commons.io.IOUtils
import groovy.xml.XmlUtil
import java.nio.charset.*
import groovy.xml.StreamingMarkupBuilder
def flowFile = session.get()
if (!flowFile) return
try {
flowFile = session.write(flowFile, { inputStream, outputStream ->
String result = IOUtils.toString(inputStream, "UTF-8");
def recordIn = new XmlSlurper().parseText(result)
def element = recordIn.depthFirst().find {
it.name() == 'id'
}
def newId = Integer.parseInt(element.toString()) + 1
def recordOut = new XmlSlurper().parseText(result)
recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId
def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()
outputStream.write(res.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e) {
log.error("Error during processing of validate.groovy", e)
session.transfer(flowFile, REL_FAILURE)
}
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π½Π° ΡΡΠΎΠΌ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΠ°Π»Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΡΡΠ»ΠΊΠΎΠΉ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ. ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°.
ΠΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ SOAP ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠΈΡΠ΅ΠΌ ΠΊΡΠ΄Π°. ΠΠ°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ SOAP.
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Ρ
ΠΎΡΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅(soapAction). Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ»Π°ΡΡ SOAP Π·Π°ΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² NIFI. ΠΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΈ ΠΊΠ°ΠΊΠ°Ρ ΠΎΡ Π½ΠΈΡ ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ»ΡΠ·Π°. Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΌΠΈ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π½Π° Π±ΠΎΡ. ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΡΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²ΠΎΠΏΡΠΎΡΡ β ΠΏΠΈΡΠΈΡΠ΅. ΠΠΎΡΡΠ°ΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠΈΡΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com