Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

پېژندنه

داسې پیښ شول چې زما د کار په اوسني ځای کې زه باید د دې ټیکنالوژۍ سره آشنا شم. زه به د لږ شالید سره پیل وکړم. په راتلونکې ناسته کې، زموږ ټیم ته وویل شول چې موږ اړتیا لرو چې یووالي سره یوځای کړو پیژندل شوی سیسټم. د ادغام په واسطه دا پدې معنی وه چې دا پیژندل شوی سیسټم به موږ ته د HTTP له لارې ځانګړي پای ټکي ته غوښتنې واستوي، او موږ، په عجیب ډول، د SOAP پیغام په بڼه ځوابونه بیرته واستوو. هرڅه ساده او کوچني ښکاري. له دې څخه دا تعقیب کیږي چې تاسو اړتیا لرئ ...

موخه

3 خدمتونه جوړ کړئ. د دوی لومړی د ډیټابیس تازه کولو خدمت دی. دا خدمت، کله چې نوي ډیټا د دریمې ډلې سیسټم څخه راځي، ډیټابیس کې ډاټا تازه کوي او د CSV بڼه کې یو فایل تولیدوي ترڅو راتلونکي سیسټم ته یې انتقال کړي. د دوهم خدمت پای ټکي ته ویل کیږي - د FTP ټرانسپورټ خدمت، کوم چې لیږدول شوی فایل ترلاسه کوي، دا تاییدوي، او د FTP له لارې یې د فایل ذخیره کې ځای پرځای کوي. دریم خدمت، د مصرف کونکي ډیټا لیږد خدمت، د لومړي دوه سره په غیر متناسب ډول کار کوي. دا د دریمې ډلې بهرني سیسټم څخه غوښتنه ترلاسه کوي ترڅو پورته بحث شوي فایل ترلاسه کړي ، د چمتو ځواب فایل اخلي ، ترمیم کوي (د ID ، توضیحاتو ، لینک ټو فایل ساحې تازه کوي) او ځواب د SOAP پیغام په بڼه لیږي. دا دی، ټولیز انځور په لاندې ډول دی: لومړی دوه خدمتونه خپل کار یوازې هغه وخت پیلوي کله چې د تازه کولو ډاټا راشي. دریم خدمت په دوامداره توګه کار کوي ځکه چې د معلوماتو ډیری پیرودونکي شتون لري، په هره دقیقه کې د معلوماتو لپاره شاوخوا 1000 غوښتنې. خدمتونه په دوامداره توګه شتون لري او د دوی مثالونه په مختلف چاپیریالونو کې موقعیت لري ، لکه ازموینه ، ډیمو ، دمخه تولید او محصول. لاندې یو ډیاګرام دی چې دا خدمات څنګه کار کوي. اجازه راکړئ سمدلاسه روښانه کړم چې ځینې توضیحات ساده شوي ترڅو د غیر ضروري پیچلتیا څخه مخنیوی وشي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

تخنیکي ژوروالی

کله چې د ستونزې حل کولو پلان کول ، موږ لومړی پریکړه وکړه چې په جاوا کې د پسرلي چوکاټ ، نګینکس بیلانسر ، پوسټ ګریس ډیټابیس او نورو تخنیکي او تخنیکي شیانو په کارولو سره غوښتنلیکونه جوړ کړو. له هغه وخته چې د تخنیکي حل رامینځته کولو وخت موږ ته اجازه راکړه چې د دې ستونزې حل کولو لپاره نورې لارې په پام کې ونیسو، زموږ سترګې د اپاچي NIFI ټیکنالوژۍ ته ورسیدې، کوم چې په ځینو حلقو کې فیشن دی. زه به سمدلاسه ووایم چې دې ټیکنالوژۍ موږ ته اجازه راکړه چې دې 3 خدماتو ته پام وکړو. دا مقاله به د فایل ترانسپورت خدمت پراختیا او مصرف کونکي ته د ډیټا لیږد خدمت تشریح کړي ، مګر که مقاله ګټوره وي ، زه به په ډیټابیس کې د معلوماتو تازه کولو خدمت په اړه ولیکم.

دا څه دي؟

NIFI د ډیټا ګړندي موازي بار کولو او پروسس کولو لپاره توزیع شوی جوړښت دی ، د سرچینو او بدلونونو لپاره لوی شمیر پلگ انونه ، د تشکیلاتو نسخه کول او نور ډیر څه. یو ښه بونس دا دی چې کارول یې خورا اسانه دي. کوچنۍ پروسې لکه getFile، sendHttpRequest او نور د مربع په توګه ښودل کیدی شي. هر مربع د پروسې استازیتوب کوي، کوم چې تعامل یې په لاندې انځور کې لیدل کیدی شي. د پروسې تنظیم کولو تعاملاتو په اړه نور تفصيلي اسناد لیکل شوي دلته د هغو کسانو لپاره چې روسي خبرې کوي - دلته. اسناد په بشپړ ډول تشریح کوي چې څنګه د NIFI خلاصول او چلول ، او همدارنګه د پروسې رامینځته کولو څرنګوالی چې د مربع په نوم هم پیژندل کیږي
د یوې مقالې لیکلو مفکوره د یوې اوږدې پلټنې وروسته رامینځته شوې او د ترلاسه شوي معلوماتو جوړښت په یو څه شعوري ډول رامینځته کول ، او همدارنګه د راتلونکي پراختیا کونکو لپاره د ژوند یو څه اسانه کولو هیله.

بېلګه:

یو مثال په پام کې نیول شوی چې مربع څنګه یو له بل سره تعامل کوي. عمومي سکیم خورا ساده دی: موږ د HTTP غوښتنه ترلاسه کوو (په تیوري کې، د غوښتنې په بدن کې د فایل سره. د NIFI وړتیاو ښودلو لپاره، پدې مثال کې غوښتنه د ځایی فایل ذخیره کولو څخه د فایل ترلاسه کولو پروسه پیل کوي. )، بیا موږ یو ځواب بیرته واستوو چې غوښتنه ترلاسه شوې ده، په موازي توګه د FH څخه د فایل ترلاسه کولو پروسه او بیا د FTP له لارې FH ته د لیږدولو پروسه. دا د روښانه کولو وړ ده چې پروسې د تش په نامه فلو فایل له لارې یو له بل سره اړیکه لري. دا په NIFI کې بنسټیزه اداره ده چې ځانګړتیاوې او مینځپانګې ذخیره کوي. منځپانګه هغه معلومات دي چې د جریان فایل لخوا استازیتوب کیږي. دا دی، تقریبا خبرې کول، که تاسو د یوې مربع څخه فایل ترلاسه کړئ او بل ته یې انتقال کړئ، مینځپانګه به ستاسو فایل وي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

لکه څنګه چې تاسو لیدلی شئ، دا انځور عمومي پروسه ښیي. HandleHttpRequest - غوښتنې مني، د متن بدلول - د غبرګون بدن رامینځته کوي، HandleHttpResponse - ځواب لیږي. FetchFile - د فایل ذخیره کولو څخه فایل ترلاسه کوي، دا مربع PutSftp ته لیږدوي - دا فایل په FTP کې، په ټاکل شوي پته کې اچوي. اوس د دې پروسې په اړه نور.

په دې حالت کې، غوښتنه د هر څه پیل دی. راځئ چې د دې ترتیب کولو پیرامیټونو ته وګورو.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

دلته هرڅه د StandardHttpContextMap استثنا سره خورا کوچني دي - دا یو ډول خدمت دی چې تاسو ته اجازه درکوي غوښتنې واستوئ او ترلاسه کړئ. په ډیر تفصیل او حتی د مثالونو سره، تاسو لیدلی شئ - دلته

بیا، راځئ چې د مربع د ReplaceText ترتیب کولو پیرامیټونو ته وګورو. دا د ReplacementValue ته د پام وړ ارزښت لري - دا هغه څه دي چې کارونکي ته به د ځواب په بڼه بیرته راستانه شي. په ترتیباتو کې تاسو کولی شئ د ننوتلو کچه تنظیم کړئ، تاسو کولی شئ لاګونه وګورئ {چیرته چې تاسو nifi unpacked/nifi-1.9.2/logs، د ناکامۍ/بریالیتوب پیرامیټونه هم شتون لري - د دې پیرامیټونو پراساس تاسو کولی شئ پروسه په بشپړ ډول تنظیم کړئ . دا دی، د بریالي متن پروسس کولو په صورت کې، کارونکي ته د ځواب لیږلو پروسه به بلل کیږي، او په بل حالت کې به موږ په ساده ډول ناکامه پروسه لاګ کړو.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

په HandleHttpResponse ملکیتونو کې په ځانګړي ډول په زړه پوري هیڅ شی شتون نلري پرته له هغه حالت څخه کله چې ځواب په بریالیتوب سره رامینځته شي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

موږ غوښتنه او ځواب ترتیب کړی - راځئ چې د فایل ترلاسه کولو او د FTP سرور کې ځای په ځای کولو ته لاړ شو. FetchFile - په ترتیباتو کې مشخص شوي لاره کې فایل ترلاسه کوي او راتلونکي پروسې ته یې لیږدوي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

او بیا د PutSftp مربع - فایل د فایل ذخیره کې ځای په ځای کوي. موږ کولی شو لاندې د ترتیب کولو پیرامیټونه وګورو.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

دا د دې حقیقت په پام کې نیولو سره ارزښت لري چې هر مربع یو جلا پروسه ده چې باید پیل شي. موږ ساده مثال ته ګورو چې هیڅ پیچلي تخصیص ته اړتیا نلري. بیا ، موږ به پروسه یو څه نور پیچلې وګورو ، چیرې چې موږ به په نالیو کې لږ څه ولیکو.

ډیر پیچلی مثال

مصرف کونکو ته د معلوماتو لیږد خدمت د SOAP پیغام بدلولو پروسې له امله یو څه ډیر پیچلی و. عمومي پروسه په لاندې شکل کې ښودل شوې.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

دلته نظر هم په ځانګړي ډول پیچلی ندی: موږ د پیرودونکي څخه غوښتنه ترلاسه کړه چې هغه ډیټا ته اړتیا لري، یو ځواب یې واستاوه چې هغه یو پیغام ترلاسه کړی، د ځواب فایل ترلاسه کولو پروسه یې پیل کړه، بیا یې د یو ځانګړي منطق سره ایډیټ کړه، او بیا سرور ته د SOAP پیغام په بڼه مصرف کونکي ته فایل لیږدول.

زما په اند د هغه چوکیو بیا تشریح کولو ته اړتیا نشته چې موږ پورته ولیدل - راځئ چې مستقیم نوي ته لاړ شو. که تاسو اړتیا لرئ کوم فایل ایډیټ کړئ او د عادي بدلولو متن ډول مربع مناسب نه وي ، تاسو باید خپل سکریپټ ولیکئ. دا د ExecuteGroogyScript مربع په کارولو سره ترسره کیدی شي. د هغې تنظیمات لاندې وړاندې شوي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

په دې مربع کې د سکریپټ پورته کولو لپاره دوه اختیارونه شتون لري. لومړی د سکریپټ سره د فایل ډاونلوډ کول دي. دوهم د سکریپټ باډي ته د سکریپټ داخلولو سره دی. تر هغه ځایه چې زه پوهیږم، د executeScript مربع د څو ژبو ملاتړ کوي - یو له دوی څخه ګرووي دی. زه به د جاوا پراختیا کونکي مایوسه کړم - تاسو نشئ کولی په داسې چوکیو کې جاوا کې سکریپټونه ولیکئ. د هغو کسانو لپاره چې واقعیا غواړي ، تاسو اړتیا لرئ خپل دودیز مربع جوړ کړئ او د NIFI سیسټم کې یې اضافه کړئ. دا ټول عملیات د تیمبورین سره د اوږدې نڅا سره دي، کوم چې موږ به پدې مقاله کې معامله ونه کړو. ما ګرووي ژبه غوره کړه. لاندې د ازموینې سکریپټ دی چې په ساده ډول په SOAP پیغام کې ID په تدریجي ډول تازه کوي. دا مهمه ده چې یادونه وشي. تاسو د فلو فایل څخه فایل واخلئ او تازه یې کړئ، مه هیروئ چې تاسو اړتیا لرئ دا بیرته هلته وساتئ، تازه شوی. دا هم د یادولو وړ ده چې ټول کتابتونونه پکې شامل ندي. دا ممکن پیښ شي چې تاسو لاهم د لیبونو څخه یو وارد کړئ. بل نیمګړتیا دا ده چې په دې مربع کې سکریپټ ډیبګ کول خورا ستونزمن دي. د NIFI JVM سره وصل کولو او د ډیبګ کولو پروسې پیل کولو لپاره یوه لاره شتون لري. په شخصي توګه، ما یو محلي غوښتنلیک پیل کړ او د غونډې څخه د فایل ترلاسه کولو سمبالول. ما په سیمه ایزه توګه ډیبګ هم وکړ. هغه تېروتنې چې د سکریپټ پورته کولو په وخت کې څرګندیږي د ګوګل لپاره خورا اسانه دي او د 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)
}

په حقیقت کې، دا هغه ځای دی چې د مربع تخصیص پای ته رسیږي. بیا، تازه شوی فایل مربع ته لیږدول کیږي، کوم چې سرور ته د فایل لیږلو مسولیت لري. لاندې د دې مربع لپاره ترتیبات دي.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

موږ هغه طریقه تشریح کوو چې د SOAP پیغام به لیږدول کیږي. موږ چیرته لیکو. بیا تاسو اړتیا لرئ په ګوته کړئ چې دا SOAP دی.

Apache NIFI - په عمل کې د ځانګړتیاوو یوه لنډه کتنه

ډیری ملکیتونه اضافه کړئ لکه کوربه او عمل (صابن اکشن). موږ خوندي کوو او چک کوو. تاسو کولی شئ د SOAP غوښتنې لیږلو څرنګوالي په اړه نور توضیحات وګورئ دلته

موږ د NIFI پروسو کارولو لپاره ډیری اختیارونه ولیدل. دوی څنګه تعامل کوي او د دوی اصلي ګټه څه ده؟ هغه مثالونه چې په پام کې نیول شوي د ازموینې دي او یو څه توپیر لري چې واقعیا په جګړه کې پیښیږي. زه امید لرم چې دا مقاله به د پراختیا کونکو لپاره یو څه ګټور وي. له پاملرنې څخه مو مننه. که تاسو کومه پوښتنه لرئ، ولیکئ. زه به د ځواب هڅه وکړم.

سرچینه: www.habr.com

Add a comment