Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

fampidirana

Sendra ny toerana iasako ankehitriny dia tsy maintsy nifankazatra tamin'io teknolojia io. Hatomboko amin'ny fototra kely. Tamin'ny fivoriana manaraka dia nilazana ny ekipanay fa mila mamorona integration izahay rafitra fantatra. Amin'ny alΓ lan'ny fampidirana dia midika fa ity rafitra fanta-daza ity dia handefa fangatahana amin'ny alΓ lan'ny HTTP mankany amin'ny teboka iray manokana, ary izahay, mahagaga, dia handefa valiny amin'ny endrika hafatra SOAP. Toa tsotra sy tsy misy dikany ny zava-drehetra. Avy amin'izany dia mila ...

asa

Mamorona serivisy 3. Ny voalohany amin'izy ireo dia ny Database Update Service. Ity serivisy ity, rehefa tonga avy amin'ny rafitra antoko fahatelo ny angona vaovao, dia manavao ny angon-drakitra ao amin'ny angon-drakitra ary mamorona rakitra amin'ny endrika CSV mba hamindrana azy amin'ny rafitra manaraka. Ny fiafaran'ny serivisy faharoa dia antsoina hoe - FTP Transport Service, izay mandray ny rakitra nafindra, manamarina izany, ary mametraka azy ao anaty fitehirizana rakitra amin'ny alΓ lan'ny FTP. Ny serivisy fahatelo, ny serivisy famindrana angon-drakitra ho an'ny mpanjifa, dia miasa tsy mifanaraka amin'ny roa voalohany. Mahazo fangatahana avy amin'ny rafitra ivelany avy amin'ny antoko fahatelo handray ny rakitra resahina etsy ambony, maka ny rakitra valiny vonona, manova azy (manavao ny id, famaritana, saha linkToFile) ary mandefa ny valiny amin'ny endrika hafatra SOAP. Izany hoe, ny sary ankapobeny dia toy izao manaraka izao: ny serivisy roa voalohany dia manomboka ny asany raha tsy rehefa tonga ny angon-drakitra momba ny fanavaozana. Ny serivisy fahatelo dia miasa tsy tapaka satria maro ny mpanjifan'ny fampahalalana, momba ny fangatahana data 1000 isa-minitra. Ny serivisy dia misy tsy tapaka ary ny trangan'izy ireo dia hita amin'ny tontolo samihafa, toy ny fitsapana, demo, mialoha ny famokarana ary ny prod. Ity ambany ity ny sarin'ny fomba fiasan'ireo serivisy ireo. Hazavaiko avy hatrany fa nohamafisina ny antsipiriany sasany mba hialana amin'ny fahasarotana tsy ilaina.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Fandalinana ara-teknika

Rehefa manomana vahaolana amin'ny olana izahay dia nanapa-kevitra ny hanao fampiharana amin'ny Java amin'ny fampiasana ny rafitra Lohataona, Nginx balancer, Postgres database ary zavatra ara-teknika hafa fa tsy ara-teknika. Hatramin'ny fotoana namolavolana vahaolana ara-teknika dia namela anay handinika fomba hafa hamahana ity olana ity, ny fijerinay dia nitodika tamin'ny teknolojia Apache NIFI, izay lamaody amin'ny faribolana sasany. Lazaiko avy hatrany fa ity teknolojia ity dia namela anay nahatsikaritra ireo serivisy 3 ireo. Ity lahatsoratra ity dia mamaritra ny fivoaran'ny serivisy fitaterana rakitra sy serivisy famindrana angon-drakitra ho an'ny mpanjifa, fa raha mahasoa ny lahatsoratra dia hanoratra momba ny serivisy fanavaozana ny angona ao amin'ny tahiry aho.

Inona izany?

NIFI dia maritrano nozaraina ho an'ny fandefasana haingana sy fanodinana angon-drakitra, plugins marobe ho an'ny loharano sy fanovana, famoahana ny fanamafisana ary maro hafa. Ny bonus tsara dia ny hoe tena mora ampiasaina. Ny dingana tsy misy dikany toy ny getFile, sendHttpRequest ary ny hafa dia azo aseho ho efamira. Ny efamira tsirairay dia maneho dingana iray, ny fifandraisan'izy ireo dia azo jerena amin'ny sary etsy ambany. Nosoratana ny antontan-taratasy amin'ny antsipiriany bebe kokoa momba ny fifandraisana amin'ny fananganana dingana eto , ho an'ireo izay miteny Rosiana - eto. Ny antontan-taratasy dia mamaritra tsara ny fomba hamahana sy hampandehanana ny NIFI, ary koa ny fomba hamoronana dingana, fantatra amin'ny anarana hoe efamira.
Ny hevitra hanoratra lahatsoratra dia teraka taorian'ny fikarohana lava sy ny fandrafetana ny vaovao voaray ho zavatra tonga saina, ary koa ny faniriana hanamora ny fiainana ho an'ny mpamorona ho avy.

ohatra

Ohatra iray amin'ny fomba ifandraisan'ny efamira amin'ny tsirairay. Ny drafitra ankapobeny dia tsotra: Mahazo fangatahana HTTP izahay (Amin'ny teoria, misy rakitra ao amin'ny vatan'ny fangatahana. Mba hampisehoana ny fahaizan'ny NIFI, amin'ity ohatra ity dia manomboka ny dingana fandraisana rakitra avy amin'ny fitehirizana rakitra eo an-toerana ny fangatahana. ), avy eo dia mandefa valiny izahay fa voaray ny fangatahana, mifanandrify amin'ny dingana fandraisana rakitra avy amin'ny FH ary avy eo ny fizotran'ny famindrana azy amin'ny FTP mankany FH. Ilaina ny manazava fa ny dingana dia mifandray amin'ny tsirairay amin'ny alΓ lan'ny antsoina hoe flowFile. Ity no singa fototra ao amin'ny NIFI izay mitahiry ny toetra sy ny atiny. Ny votoaty dia ny angona asehon'ny rakitra stream. Izany hoe, raha lazaina amin'ny teny manodidina, raha mahazo rakitra avy amin'ny efamira iray ianao ary mamindra izany amin'ny iray hafa, ny atiny dia ny rakitrao.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Araka ny hitanao, ity sary ity dia mampiseho ny dingana ankapobeny. HandleHttpRequest - manaiky fangatahana, ReplaceText - mamorona vatana valiny, HandleHttpResponse - mandefa valiny. FetchFile - mandray rakitra avy amin'ny fitahirizana rakitra, mamindra azy amin'ny kianja PutSftp - mametraka ity rakitra ity amin'ny FTP, amin'ny adiresy voafaritra. Ankehitriny bebe kokoa momba ity dingana ity.

Amin'ity tranga ity, ny fangatahana no fiandohan'ny zava-drehetra. Andeha hojerentsika ny masontsivana config.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Ny zava-drehetra eto dia tsy misy dikany afa-tsy ny StandardHttpContextMap - karazana serivisy ahafahanao mandefa sy mandray fangatahana. Amin'ny antsipiriany bebe kokoa ary na dia misy ohatra aza dia azonao jerena - eto

Manaraka, andeha hojerentsika ny masontsivana fanitsiana ny ReplaceText amin'ny kianja. Ilaina ny mandinika ny ReplacementValue - izany no haverina amin'ny mpampiasa amin'ny endrika valiny. Ao amin'ny toe-javatra azonao atao ny manitsy ny haavon'ny logging, dia afaka mahita ny logs {izay nosokafanao nifi}/nifi-1.9.2/logs, misy ihany koa ny tsy fahombiazana/fahombiazana parameter - mifototra amin'ireo masontsivana ireo dia azonao atao ny mifehy ny dingana manontolo. . Izany hoe, amin'ny trangan-javatra mahomby amin'ny fanodinana lahatsoratra dia antsoina ny dingan'ny fandefasana valiny amin'ny mpampiasa, ary amin'ny tranga hafa dia hampiditra fotsiny ny dingana tsy nahomby.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Tsy misy zavatra mahaliana manokana ao amin'ny fananana HandleHttpResponse afa-tsy ny sata rehefa vita ny valiny.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Nandamina ny fangatahana sy ny valiny izahay - andao hiroso amin'ny fandraisana ny rakitra ary hametraka izany amin'ny mpizara FTP. FetchFile - mandray rakitra amin'ny lalana voafaritra ao amin'ny toe-javatra ary mampita izany amin'ny dingana manaraka.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Ary avy eo ny kianja PutSftp - mametraka ny rakitra ao amin'ny fitehirizana rakitra. Hitantsika eto ambany ny mari-pamantarana fanamafisana.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Tsara ny manamarika fa ny kianja tsirairay dia dingana iray tsy maintsy atomboka. Nijery ny ohatra tsotra indrindra izay tsy mitaky fanamboarana sarotra. Manaraka, hijery ny dingana sarotra kokoa isika, izay hanoratra kely amin'ny grooves.

Ohatra sarotra kokoa

Ny serivisy famindrana angon-drakitra ho an'ny mpanjifa dia nanjary sarotra kokoa noho ny dingana fanovana ny hafatra SOAP. Ny dingana ankapobeny dia aseho amin'ny sary etsy ambany.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Eto dia tsy sarotra ihany koa ny hevitra: nahazo fangatahana avy amin'ny mpanjifa izahay fa mila data izy, nandefa valiny fa naharay hafatra izy, nanomboka ny dingana fandraisana ny antontan-taratasy valiny, avy eo dia nanova izany tamin'ny lojika iray, ary avy eo namindra ny rakitra tany amin'ny mpanjifa amin'ny endrika hafatra SOAP amin'ny mpizara.

Heveriko fa tsy ilaina ny mamaritra indray ireo efamira hitantsika teo ambony ireo - andao hizotra mankany amin'ny vaovao. Raha mila manitsy rakitra ianao ary tsy mety ny efamira karazana ReplaceText mahazatra dia tsy maintsy manoratra ny scripto manokana ianao. Azo atao izany amin'ny alΓ lan'ny efamira ExecuteGroogyScript. Aseho eto ambany ny firafiny.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Misy safidy roa hametahana ny script amin'ity kianja ity. Ny voalohany dia ny fampidinana rakitra misy script. Ny faharoa dia amin'ny fampidirana script ao amin'ny scriptBody. Raha ny fahafantarako azy, ny kianja executeScript dia manohana fiteny maromaro - ny iray amin'izy ireo dia groovy. Handiso fanantenana ny mpamorona java aho - tsy afaka manoratra script amin'ny java amin'ny efamira toy izany ianao. Ho an'ireo izay tena maniry izany dia mila mamorona efamira manokana ianao ary ampio amin'ny rafitra NIFI. Ity hetsika manontolo ity dia miaraka amin'ny dihy lava be miaraka amin'ny ampongatapaka, izay tsy horesahina ato amin'ity lahatsoratra ity. Nifidy ny fiteny groovy aho. Ity ambany ity ny script fitsapana izay manavao tsikelikely ny id amin'ny hafatra SOAP. Zava-dehibe ny manamarika. Raisinao ny rakitra avy amin'ny flowFile ary manavao azy, aza adino fa mila averinao ao, nohavaozina. Tsara ihany koa ny manamarika fa tsy ny tranomboky rehetra no tafiditra ao. Mety hitranga fa mbola mila manafatra iray amin'ireo libs ianao. Ny lafy ratsiny iray hafa dia ny hoe ny script amin'ity kianja ity dia tena sarotra ny debug. Misy fomba hifandraisana amin'ny NIFI JVM ary manomboka ny dingana debugging. Izaho manokana dia nanangana fampiharana eo an-toerana ary nanao simulate ny fandraisana rakitra avy amin'ny session. Nanao debugging teo an-toerana ihany koa aho. Ny hadisoana miseho rehefa mametaka script dia mora amin'ny Google ary nosoratan'i NIFI mihitsy ao amin'ny 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)
}

Raha ny marina, eto no mifarana ny fanamboarana ny kianja. Avy eo, ny rakitra nohavaozina dia nafindra tany amin'ny kianja, izay tompon'andraikitra amin'ny fandefasana ny rakitra amin'ny mpizara. Ireto ambany ireto ny firafitry ny kianja.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Manoritsoritra ny fomba fampitana hafatra SOAP izahay. Manoratra izahay hoe aiza. Avy eo dia mila manondro ianao fa SOAP ity.

Apache NIFI - Fijery fohifohy momba ny fahafahana amin'ny fampiharana

Manampia fananana maro toy ny mpampiantrano sy hetsika (soapAction). Mitahiry sy manamarina. Afaka mahita antsipiriany bebe kokoa momba ny fomba fandefasana fangatahana SOAP ianao eto

Nijery safidy maromaro izahay amin'ny fampiasana ny fizotran'ny NIFI. Ahoana ny fifandraisan'izy ireo ary inona no tena tombony azony? Ny ohatra raisina dia fitsapana ary tsy mitovy amin'ny zava-mitranga marina amin'ny ady. Manantena aho fa hahasoa kely ho an'ny mpamorona ity lahatsoratra ity. Misaotra anao noho ny fifantohanao. Raha manana fanontaniana ianao dia manorata. Hiezaka aho hamaly.

Source: www.habr.com

Add a comment