Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Horudhac

Waxa dhacday in goobta aan hadda ka shaqeeyo ay tahay in aan barto farsamadan. Waxaan ku bilaabayaa asal yar. Kulankii xigay, kooxdayada waxaa loo sheegay in aan u baahanahay in aan abuurno isdhexgalka nidaamka la yaqaan. Isku dhafka waxaa loola jeeday in nidaamkan caanka ah uu noogu soo diro codsiyada HTTP si uu u gaaro meel gaar ah, annaguna, si aan la yaab lahayn, ayaa dib ugu soo celin doona jawaabaha fariinta SOAP. Wax walba waxay u muuqdaan kuwo fudud oo aan waxtar lahayn. Halkan waxaa ku yaal inaad u baahan tahay ...

Ujeeddo

Abuur 3 adeeg Midka ugu horreeya waa Adeegga Cusbooneysiinta Xogta. Adeegan, marka xogta cusubi ka timaaddo nidaamka saddexaad, waxa uu cusboonaysiiyaa xogta ku jirta kaydka xogta oo soo saarta fayl qaab CSV ah si loogu wareejiyo nidaamka xiga. Dhamaadka adeegga labaad waxaa loo yaqaan - Adeegga Gaadiidka FTP, kaas oo hela faylka la wareejiyay, wuxuu ansaxiyaa, oo ku dhejiyaa kaydinta faylka iyada oo loo marayo FTP. Adeegga saddexaad, adeegga wareejinta xogta macaamilka, wuxuu si la mid ah ula shaqeeyaa labada hore. Waxa ay codsi ka heshaa nidaamka dibadda ee qolo saddexaad si ay u hesho faylka kor lagaga hadlay, waxa ay qaadataa faylka jawaabta diyaarka ah, wax ka beddesha (cusbooneysii aqoonsiga, sharraxaadda, goobaha linkToFile) oo u dirtaa jawaabta qaab fariin SOAP ah. Taasi waa, sawirka guud waa sida soo socota: labada adeeg ee ugu horreeya waxay bilaabaan shaqadooda kaliya marka xogta cusboonaysiinta ay timaado. Adeegga saddexaad wuxuu u shaqeeyaa si joogto ah sababtoo ah waxaa jira macaamiil badan oo macluumaad ah, qiyaastii 1000 codsiyo xog ah daqiiqadii. Adeegyada si joogto ah ayaa loo heli karaa, tusaalooyinkooduna waxay ku yaalliin deegaanno kala duwan, sida imtixaan, bandhig, wax-soo-saar hore iyo wax soo saar. Hoos waxaa ku yaal jaantuska sida adeegyadani u shaqeeyaan. Aan isla markiiba caddeeyo in faahfaahinta qaar la fududeeyay si looga fogaado kakanaanta aan loo baahnayn.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Qoto dheeraynta Farsamada

Marka la qorsheynayo xalinta dhibaatada, waxaan marka hore go'aansanay inaan ku sameyno codsiyada Java iyadoo la adeegsanayo qaabka gu'ga, dheelitirka Nginx, database Postgres iyo farsamooyin kale oo aan ahayn farsamooyin farsamo. Tan iyo markii la horumarinayo xal farsamo ayaa noo ogolaatay inaan tixgelinno habab kale oo lagu xalliyo dhibaatadan, aragtidayadu waxay ku dhacday tignoolajiyada Apache NIFI, taas oo ah moodada wareegyada qaarkood. Waxaan isla markiiba odhan doonaa tignoolajiyadani waxay noo ogolaatay inaan ogaano adeegyadan 3. Maqaalkani wuxuu sharxi doonaa horumarinta adeegga gaadiidka faylka iyo adeegga wareejinta xogta ee macaamilka, laakiin haddii maqaalku faa'iido u leeyahay, waxaan ku qori doonaa adeegga cusboonaysiinta xogta kaydka.

Maxay tahay?

NIFI waa qaab-dhismeed loo qaybiyay oo loogu talagalay isbarbardhigga degdega ah iyo habaynta xogta, tiro badan oo plugins ah oo loogu talagalay ilaha iyo isbeddelada, qaabaynta qaabaynta iyo wax ka badan. Gunno fiican ayaa ah in ay aad u fududahay in la isticmaalo. Nidaamyada fudud sida getFile, sendHttpRequest iyo kuwa kale ayaa loo matali karaa labajibbaaran. Labajibbaaran kastaa wuxuu matalaa habraac, isdhexgalka kaas oo laga arki karo sawirka hoose. Dukumeenti aad u faahfaahsan oo ku saabsan isdhexgalka habaynta habsocodka ayaa la qoray halkan , kuwa ku hadla afka Ruushka - halkan. Dukumeentigu wuxuu si fiican u qeexayaa sida loo furo oo loo maamulo NIFI, iyo sidoo kale sida loo abuuro habab, oo sidoo kale loo yaqaano labajibaaran
Fikradda qorista maqaalka waxay dhalatay ka dib raadin dheer iyo qaabaynta macluumaadka la helay wax miyir leh, iyo sidoo kale rabitaanka in nolosha loo fududeeyo horumarinta mustaqbalka.

Tusaale:

Tusaale ahaan sida afar geesoodyadu ay isula falgalaan ayaa loo tixgaliyaa. Nidaamka guud waa mid fudud: Waxaan helnaa codsi HTTP ah (Aragti ahaan, oo leh fayl ku jira jirka codsiga. Si loo muujiyo awoodaha NIFI, tusaale ahaan codsigu wuxuu bilaabaa habka helitaanka faylka laga helo kaydinta faylka deegaanka. ), ka dib waxaan dib u soo celinaynaa jawaabta ah in codsiga la helay, iyadoo la barbar-dhigo habka loo helo faylka FH ka dibna habka loo gudbiyo FTP loona wareejiyo FH. Waxaa mudan in la caddeeyo in geeddi-socodyadu ay is dhexgalaan iyada oo loo marayo waxa loogu yeero flowFile. Kani waa qaybta aasaasiga ah ee NIFI ee kaydisa sifooyinka iyo waxa ku jira. Nuxurku waa xogta uu matalo faylka qulqulka. Taasi waa, qiyaas ahaan, haddii aad ka hesho fayl hal labajibbaaran oo aad u wareejiso mid kale, nuxurku wuxuu noqonayaa faylkaaga.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Sida aad arki karto, sawirkani wuxuu muujinayaa habka guud. HandleHttpCodsiga - aqbal codsiyada, Bedel Text - waxay abuurtaa hay'ad jawaabeed, HandleHttpResponse - waxay soo dirtaa jawaab. FetchFile - waxay ka heshaa faylka kaydinta faylalka, waxay u gudbisaa labajibbaaran PutSftp - waxay gelisaa faylkan FTP, ciwaanka la cayimay. Hadda wax badan oo ku saabsan habkan.

Xaaladdan oo kale, codsigu waa bilowga wax walba. Aynu eegno xuduudaheeda qaabeynta.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Wax kasta oo halkan ku yaal waa wax aan waxtar lahayn marka laga reebo StandardHttpContextMap - kani waa nooc adeeg oo kuu oggolaanaya inaad dirto oo aad hesho codsiyada. Si faahfaahsan iyo xitaa tusaalooyin, waxaad arki kartaa - halkan

Marka xigta, aan eegno Beddelka qoraalka qaabaynta cabbirada afargeeska. Waxaa mudan in fiiro gaar ah loo yeesho ReplacementValue - tani waa waxa lagu soo celin doono isticmaalaha qaab jawaab celin ah. Goobaha waxaad ku hagaajin kartaa heerka galitaanka, waxaad arki kartaa diiwaannada {halka aad ka soo saartay nifi}/nifi-1.9.2/logs, waxaa sidoo kale jira xaddidaadyo guuldarro/guul ah - oo ku saleysan cabbirradan waxaad nidaamin kartaa habka guud ahaan. . Taasi waa, marka la eego habsocodka qoraalka ee guuleysta, habka loo diro jawaabta isticmaalaha ayaa loo yeeri doonaa, xaalad kale waxaan si fudud u gali doonaa habka aan guulaysan.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Ma jiraan wax xiiso gaar ah leh oo ku jira guryaha HandleHttpResponse marka laga reebo xaalada marka jawaabta si guul leh loo abuuro.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Waanu xallinay codsigii iyo jawaabtii - aynu u gudubno helitaanka faylka oo aynu dul saarno server-ka FTP. FetchFile - waxay ku heshaa fayl dariiqa lagu cayimay goobaha waxayna u gudbisaa habka xiga.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Kadibna labajibbaaran PutSftp - wuxuu dhigayaa faylka kaydinta faylka. Waxaan hoos ku arki karnaa xuduudaha qaabeynta.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Waxaa habboon in fiiro gaar ah loo yeesho xaqiiqda ah in labajibbaaran kasta uu yahay hannaan gaar ah oo ay tahay in la bilaabo. Waxaan eegnay tusaalaha ugu fudud ee aan u baahnayn wax habayn adag. Marka xigta, waxaan eegi doonaa habka wax yar oo dhib badan, halkaas oo aan wax yar ku qori doono jeexjeexyada.

Tusaale ka sii adag

Adeegga wareejinta xogta ee macaamilka waxa uu noqday mid aad u dhib badan habka wax looga beddelayo farriinta SOAP awgeed. Habka guud ayaa lagu muujiyay sawirka hoose.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Halkan fikradda sidoo kale maaha mid si gaar ah u dhib badan: waxaan ka helnay codsi macmiilka ah inuu u baahan yahay xogta, wuxuu u diray jawaab celin ah inuu helay fariin, wuxuu bilaabay habka helitaanka faylka jawaabta, ka dibna wuxuu ku dhejiyay caqli-gal gaar ah, ka dibna u gudbiyay faylka macmiilka qaab fariin SOAP ah server-ka.

Waxaan filayaa in aan loo baahnayn in dib loo qeexo fagaarayaashaas aan kor ku soo aragnay - aan si toos ah ugu dhaqaaqno kuwa cusub. Haddii aad u baahato inaad wax ka beddesho fayl kasta iyo labajibbaaranyada nooca beddelka qoraalka ah kuma habboona, waa inaad qortaa qoraalkaaga. Tan waxaa lagu samayn karaa iyadoo la isticmaalayo afar geesaha ExecuteGroogyScript. Habaynteeda ayaa lagu soo bandhigay hoos.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Waxaa jira laba ikhtiyaar oo loogu raro qoraalka qoraalka afargan. Midda koowaad waa adigoo soo dejinaya fayl leh qoraal. Midda labaad waa iyada oo la gelinayo qoraal scriptBody. Ilaa hadda inta aan ogahay, square-exeexeScript wuxuu taageeraa dhowr luqadood - mid ka mid ah waa groovy. Waxaan niyad jabin doonaa horumariyeyaasha Java-ma qori kartid qoraallada java-gaabyadan oo kale. Kuwa runtii doonaya, waxaad u baahan tahay inaad abuurto labajibbaaran caadadaada oo aad ku darto nidaamka NIFI. Qalliinkan oo dhan waxa weheliya qoob-ka-cayaar aad u dheer oo daf leh, kaas oo aynaan kaga hadli doonin maqaalkan. Waxaan doortay luqadda roodhida. Hoos waxaa ku yaal qoraal tijaabo ah oo si fudud u cusbooneysiiya aqoonsiga farriinta SOAP. Waa muhiim in la ogaado. Waxaad ka soo qaadaa faylka flowFile oo cusboonaysii, ha ilaawin inaad u baahan tahay inaad halkaas ku celiso, la cusboonaysiiyay. Waxa kale oo xusid mudan in dhammaan maktabadaha aan lagu darin. Waxaa laga yaabaa inay dhacdo inaad weli soo dejiso mid ka mid ah libyada. Hoos-u-dhac kale ayaa ah in qoraalka fagaarahan uu aad u adag yahay in la saxo. Waxaa jira hab lagu xidho NIFI JVM oo aad bilowdo habka khaladka. Shakhsi ahaan, waxaan bilaabay codsi maxalli ah waxaanan u ekeysiiyay inaan ka helayo fayl fadhiga. Waxaan sidoo kale sameeyay khaladka gudaha. Khaladaadka soo baxa marka la soo shubayo qoraalka aad bay ugu fududahay Google oo NIFI lafteedu waxay ku qortaa log.

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)
}

Dhab ahaantii, halkan waa halka habeynta labajibbaarantu ku dhammaato. Marka xigta, faylka la cusboonaysiiyay waxaa loo wareejiyaa labajibbaaran, kaas oo mas'uul ka ah u dirida faylka server-ka. Hoos waxaa ku yaal habaynta afargeeska.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Waxaan sharaxnaa habka fariinta SAANUUNKA loo gudbin doono. Waxaan ku qornaa halka. Marka xigta waxaad u baahan tahay inaad muujiso in tani ay tahay SOAP.

Apache NIFI - Dulmar Kooban oo ku saabsan Tilmaamaha ku jira Dhaqanka

Ku dar dhowr guri sida martigeliyaha iyo ficil (soapAction). Waanu kaydinnaa oo hubinaa. Waxaad arki kartaa tafaasiil dheeraad ah oo ku saabsan sida loo soo diro codsiyada SOAP halkan

Waxaan eegnay dhowr ikhtiyaar oo loo isticmaalo hababka NIFI. Sidee bay u falgalaan iyo waa maxay faa'iidooyinkooda dhabta ah? Tusaalooyinka la tixgeliyo waa kuwo tijaabo ah oo wax yar ka duwan waxa dhabta ah ee ka dhaca dagaalka. Waxaan rajeynayaa in maqaalkani uu noqon doono wax yar faa'iido u leh horumarinta. Waad ku mahadsan tahay dareenkaaga. Haddii aad wax su'aalo ah qabtid, qor. Waxaan isku dayi doonaa inaan ka jawaabo

Source: www.habr.com

Add a comment