ืืืื
ืื ืงืจื ืฉืืืงืื ืขืืืืชื ืื ืืืื ืืืืชื ืฆืจืื ืืืืืจ ืืช ืืืื ืืืืืื ืืื. ืื ื ืืชืืื ืขื ืงืฆืช ืจืงืข. ืืคืืืฉื ืืืื ื ืืืจ ืืฆืืืช ืฉืื ื ืฉืื ืื ื ืฆืจืืืื ืืืฆืืจ ืืื ืืืจืฆืื ืขื ืืขืจืืช ืืืืจืช. ืืืื ืืืจืฆืื ืืืืชื ืืืืื ื ืฉืืืขืจืืช ืืืืืขื ืืื ืชืฉืื ืื ื ืืงืฉืืช ืืจื HTTP ืื ืงืืืช ืงืฆื ืืกืืืืช, ืืื ืื ื, ืืืืคื ืืืืจ, ื ืฉืื ืืืืจื ืชืืืืืช ืืฆืืจื ืฉื ืืืืขืช SOAP. ืืื ื ืจืื ืคืฉืื ืืืจืืืืืืื. ืืืื ื ืืืข ืฉืืชื ืฆืจืื...
ืืฉืืื
ืฆืืจ 3 ืฉืืจืืชืื. ืืจืืฉืื ืฉืืื ืืื ืฉืืจืืช ืขืืืื ืืกื ืื ืชืื ืื. ืฉืืจืืช ืื, ืืืฉืจ ืืืืขืื ื ืชืื ืื ืืืฉืื ืืืขืจืืช ืฆื ืฉืืืฉื, ืืขืืื ืืช ืื ืชืื ืื ืืืกื ืื ืชืื ืื ืืืืฆืจ ืงืืืฅ ืืคืืจืื CSV ืืืขืืจืชื ืืืขืจืืช ืืืื. ื ืงืืืช ืืงืฆื ืฉื ืืฉืืจืืช ืืฉื ื ื ืงืจืืช - FTP Transport Service, ืฉืืงืื ืืช ืืงืืืฅ ืืืืขืืจ, ืืืืช ืืืชื ืืืื ืืก ืืืชื ืืืืกืื ืงืืฆืื ืืืืฆืขืืช FTP. ืืฉืืจืืช ืืฉืืืฉื, ืฉืืจืืช ืืขืืจืช ืื ืชืื ืื ืืฆืจืื, ืคืืขื ืืืืคื ืืกืื ืืจืื ื ืขื ืฉื ื ืืจืืฉืื ืื. ืืื ืืงืื ืืงืฉื ืืืขืจืืช ืืืฆืื ืืช ืฉื ืฆื ืฉืืืฉื ืืงืื ืืช ืืงืืืฅ ืื ืืื ืืขืื, ืืืงื ืืช ืงืืืฅ ืืชืืืื ืืืืื ื, ืืฉื ื ืืืชื (ืืขืืื ืืช ื-ID, ืืชืืืืจ, ืฉืืืช linkToFile) ืืฉืืื ืืช ืืชืืืื ืืฆืืจื ืฉื ืืืืขืช SOAP. ืืืืืจ, ืืชืืื ื ืืืืืืช ืืื ืืืืงืื: ืฉื ื ืืฉืืจืืชืื ืืจืืฉืื ืื ืืชืืืืื ืืช ืขืืืืชื ืจืง ืืืฉืจ ืื ืชืื ืื ืืขืืืื ืืืืขื. ืืฉืืจืืช ืืฉืืืฉื ืขืืื ืืื ืืจืฃ ืื ืืฉื ื ืฆืจืื ื ืืืืข ืจืืื, ื-1000 ืืงืฉืืช ืื ืชืื ืื ืืืงื. ืืฉืืจืืชืื ืืืื ืื ืื ืืืื ืืืืืคืขืื ืฉืืื ืืืืงืืื ืืกืืืืืช ืฉืื ืืช, ืืืื ืืืืงื, ืืืืื, ืืจืื ืืืฆืืจ ืืคืจืื. ืืืื ืชืจืฉืื ืฉื ืืืคื ืืคืขืืื ืฉื ืฉืืจืืชืื ืืื. ืืจืฉื ืื ืืืืืืจ ืืื ืฉืืืง ืืืคืจืืื ืคืืฉืื ืืื ืืื ืืข ืืืจืืืืช ืืืืชืจืช.
ืืขืืงื ืืื ืืช
ืืฉืชืื ื ื ืคืชืจืื ืืืขืื, ืืืืื ื ืชืืืื ืืขืฉืืช ืืคืืืงืฆืืืช ืื'ืืืื ืืืืฆืขืืช ื-Spring framework, Nginx balancer, Postgres database ืืขืื ืืืจืื ืืื ืืื ืืื ืื ืื ืืื ืืื. ืืืืืื ืฉืืืื ืืคืืชืื ืคืชืจืื ืืื ื ืืคืฉืจ ืื ื ืืฉืงืื ืืืฉืืช ืืืจืืช ืืคืชืจืื ืืขืื ืื, ืืืื ื ื ืคื ืขื ืืื ืืืืืืืช Apache NIFI, ืฉืืื ืืืคื ืชืืช ืืืืืื ืืกืืืืื. ืื ื ืืืื ืืื ืฉืืืื ืืืืืื ืืื ืืคืฉืจื ืื ื ืืืืืื ื-3 ืืฉืืจืืชืื ืืืื. ืืืืจ ืื ืืชืืจ ืืช ืืคืืชืื ืฉื ืฉืืจืืช ืืขืืจืช ืงืืฆืื ืืฉืืจืืช ืืขืืจืช ื ืชืื ืื ืืฆืจืื, ืื ืื ืืืืืจ ืืืขืื, ืืืชืื ืขื ืืฉืืจืืช ืืขืืืื ื ืชืื ืื ืืืืืจ.
ืื ืื
NIFI ืืื ืืจืืืืงืืืจื ืืืืืจืช ืืืขืื ื ืืขืืืื ืืงืืืืื ืืืืจืื ืฉื ื ืชืื ืื, ืืกืคืจ ืจื ืฉื ืชืืกืคืื ืืืงืืจืืช ืืืจื ืกืคืืจืืฆืืืช, ืืืจืกืืืช ืฉื ืชืฆืืจืืช ืืขืื ืืขืื. ืืื ืืก ื ืืื ืืื ืฉืื ืืืื ืงื ืืฉืืืืฉ. ืชืืืืืื ืืจืืืืืืืืื ืืืื getFile, sendHttpRequest ืืืืจืื ืืืืืื ืืืืืช ืืืืฆืืื ืืจืืืืขืื. ืื ืจืืืืข ืืืืฆื ืชืืืื ืฉืืช ืืืื ืืจืืงืฆืื ืฉืื ื ืืชื ืืจืืืช ืืืืืจ ืืืื. ื ืืชื ืชืืขืื ืืคืืจื ืืืชืจ ืขื ืืื ืืจืืงืฆืืืช ืฉื ืืืืจืช ืชืืืื
ืืจืขืืื ืืืชืื ืืืืจ ื ืืื ืืืืจ ืืืคืืฉ ืืจืื ืืืื ื ืืืืืข ืืืชืงืื ืืืฉืื ืืืืข, ืืื ืื ืืจืฆืื ืืขืฉืืช ืืช ืืืืื ืงืฆืช ืืืชืจ ืงืืื ืขืืืจ ืืคืชืืื ืขืชืืืืื.
ืืืืื
ื ืืฉืืช ืืืืื ืืืืคื ืฉืื ืจืืืืขืื ืืชืงืฉืจืื ืื ืขื ืื. ืืกืืื ืืืืืืช ืื ืคืฉืืื: ืื ื ืืงืืืื ืืงืฉืช HTTP (ืืชืืืืจืื, ืขื ืงืืืฅ ืืืืฃ ืืืงืฉื. ืืื ืืืืืื ืืช ืืืืืืืช ืฉื NIFI, ืืืืืื ืื ืืืงืฉื ืืชืืืื ืชืืืื ืฉื ืงืืืช ืงืืืฅ ืืืืกืื ืืงืืฆืื ืืืงืืื ), ืืืืจ ืืื ืื ื ืฉืืืืื ืืืจื ืชืฉืืื ืฉืืืงืฉื ืืชืงืืื, ืืืงืืื ืืชืืืื ืงืืืช ืงืืืฅ ื-FH ืืืืืจ ืืื ืชืืืื ืืขืืจืชื ืืจื FTP ื-FH. ืืืื ืืืืืืจ ืฉืชืืืืืื ืืงืืืืื ืืื ืืจืืงืฆืื ืื ืขื ืื ืืืืฆืขืืช ืื ืฉื ืงืจื flowFile. ืืืื ืืฉืืช ืืืกืืก ื-NIFI ืืืืืกื ืช ืชืืื ืืช ืืชืืื. ืชืืื ืืื ืื ืชืื ืื ืฉืืืืฆืืื ืขื ืืื ืงืืืฅ ืืืจื. ืืืืืจ, ืืืืคื ืืก, ืื ืชืงืืื ืงืืืฅ ืืจืืืืข ืืื ืืชืขืืืจื ืืืชื ืืืฉื ืื, ืืชืืื ืืืื ืืงืืืฅ ืฉืืื.
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืชืืื ื ืื ืืฆืืื ืืช ืืชืืืื ืืืืื. HandleHttpRequest - ืืงืื ืืงืฉืืช, ReplaceText - ืืืฆืจ ืืืฃ ืชืืืื, HandleHttpResponse - ืฉืืื ืชืืืื. FetchFile - ืืงืื ืงืืืฅ ืืืืกืื ืงืืฆืื, ืืขืืืจ ืืืชื ืืจืืืืข PutSftp - ืฉื ืงืืืฅ ืื ืขื FTP, ืืืชืืืช ืฉืฆืืื ื. ืขืืฉืื ืขืื ืขื ืืชืืืื ืืื.
ืืืงืจื ืื, ืืืงืฉื ืืื ืืืชืืื ืฉื ืืื. ืืืื ื ืกืชืื ืขื ืคืจืืืจื ืืชืฆืืจื ืฉืื.
ืืื ืืื ืื ืืจืืืืืืื ืืืขื StandardHttpContextMap - ืืื ืกืื ืฉื ืฉืืจืืช ืฉืืืคืฉืจ ืืฉืืื ืืืงืื ืืงืฉืืช. ืืืชืจ ืคืืจืื ืืืคืืื ืขื ืืืืืืืช, ืืชื ืืืื ืืจืืืช -
ืืืืจ ืืื, ืืืื ื ืกืชืื ืขื ืคืจืืืจื ืืชืฆืืจื ืฉื ReplaceText ืฉื ืืจืืืืข. ืืืื ืืฉืื ืื ื-ReplacementValue - ืื ืื ืฉืืืืืจ ืืืฉืชืืฉ ืืฆืืจื ืฉื ืชืืืื. ืืืืืจืืช ื ืืชื ืืืชืืื ืืช ืจืืช ืืจืืฉืื, ื ืืชื ืืจืืืช ืืช ืืืืืื {ืืืื ืคืจืงืช ืืช nifi}/nifi-1.9.2/logs, ืืฉื ื ืื ืคืจืืืจืื ืฉื ืืฉื/ืืฆืืื - ืขื ืกืื ืคืจืืืจืื ืืื ื ืืชื ืืืืกืช ืืช ืืชืืืื ืืืืืืชื . ืืืืืจ, ืืืงืจื ืฉื ืขืืืื ืืงืกื ืืืฆืื, ืชืืืื ืฉืืืืช ืืชืืืื ืืืฉืชืืฉ ืืืงืจื, ืืืืงืจื ืืืจ ืคืฉืื ื ืจืฉืื ืืช ืืชืืืื ืืื ืืืฆืื.
ืืื ืฉืื ืืืจ ืืขื ืืื ืืืืืื ืืืืคืืื ื HandleHttpResponse ืืืื ืืืฆื ืืืฉืจ ืชืืืื ื ืืฆืจืช ืืืฆืืื.
ืกืืืจื ื ืืช ืืืงืฉื ืืืชืืืื - ื ืขืืืจ ืืงืืืช ืืงืืืฅ ืืืฆืืชื ืขื ืฉืจืช ื-FTP. FetchFile - ืืงืื ืงืืืฅ ืื ืชืื ืฉืฆืืื ืืืืืจืืช ืืืขืืืจ ืืืชื ืืชืืืื ืืื.
ืืื ืจืืืืข PutSftp - ืืฆืื ืืช ืืงืืืฅ ืืืืกืื ืืงืืฆืื. ืื ื ืืืืืื ืืจืืืช ืืช ืคืจืืืจื ืืชืฆืืจื ืืืื.
ืืืื ืืฉืื ืื ืืื ืฉืื ืจืืืืข ืืื ืชืืืื ื ืคืจื ืฉืืฉ ืืฆืืช ืืืจื. ืืกืชืืื ื ืขื ืืืืืื ืืคืฉืืื ืืืืชืจ ืฉืืื ื ืืืจืฉืช ืืชืืื ืืืฉืืช ืืืจืืืช. ืืืืจ ืืื, ื ืกืชืื ืขื ืืชืืืื ืงืฆืช ืืืชืจ ืืกืืื, ืฉื ื ืืชืื ืงืฆืช ืขื ืืืจืืฆืื.
ืืืืื ืืืจืืืช ืืืชืจ
ืฉืืจืืช ืืขืืจืช ืื ืชืื ืื ืืฆืจืื ืืชืืจืจ ืืืขื ืืืชืจ ืืกืืื ืขืงื ืชืืืื ืฉืื ืื ืืืืขืช SOAP. ืืชืืืื ืืืืื ืืืฆื ืืืืืจ ืืืื.
ืืื ืืจืขืืื ืื ืื ืืกืืื ืืืืืื: ืงืืืื ื ืคื ืืื ืืืฆืจืื ืฉืืื ืฆืจืื ื ืชืื ืื, ืฉืืื ื ืชืฉืืื ืฉืงืืื ืืืืขื, ืืชืืื ื ืืชืืืื ืงืืืช ืงืืืฅ ืืชืืืื, ืืืจ ืื ืขืจืื ื ืืืชื ืืืืืืื ืืกืืื, ืืื ืืขืืืจ ืืช ืืงืืืฅ ืืฆืจืื ืืฆืืจื ืฉื ืืืืขืช SOAP ืืฉืจืช.
ืื ื ืืืฉื ืฉืืื ืฆืืจื ืืชืืจ ืฉืื ืืช ืืจืืืืขืื ืฉืจืืื ื ืืืขืื - ืืืื ื ืขืืืจ ืืฉืจ ืืืืฉืื. ืื ืืชื ืฆืจืื ืืขืจืื ืงืืืฅ ืืืฉืื ืืจืืืืขืื ืจืืืืื ืืกืื ReplaceText ืืื ื ืืชืืืืื, ืชืฆืืจื ืืืชืื ืกืงืจืืคื ืืฉืื. ื ืืชื ืืขืฉืืช ืืืช ืืืืฆืขืืช ืจืืืืข ExecuteGroogyScript. ืืืืืจืืช ืฉืื ืืืฆืืืช ืืืื.
ืืฉื ื ืฉืชื ืืคืฉืจืืืืช ืืืขืื ืช ืืกืงืจืืคื ืืจืืืืข ืื. ืืจืืฉืื ืืื ืืืจืืช ืงืืืฅ ืขื ืกืงืจืืคื. ืืฉื ื ืืื ืขื ืืื ืืืกืคืช ืกืงืจืืคื ืืชืื scriptBody. ืขื ืืื ืฉืืืืข ืื, ืจืืืืข ื-executeScript ืชืืื ืืืกืคืจ ืฉืคืืช - ืืืช ืืื ืืื ืืจืืื. ืื ื ืืืืื ืืคืชืื Java - ืื ืืคืฉืจ ืืืชืื ืกืงืจืืคืืื ืื'ืืืื ืืจืืืืขืื ืืืื. ืืื ืฉืืืืช ืจืืฆื, ืฆืจืื ืืืฆืืจ ืจืืืืข ืืืชืื ืืืฉืืช ืืฉืืื ืืืืืกืืฃ ืืืชื ืืืขืจืืช NIFI. ืื ืืืืฆืข ืืื ืืืืื ืืจืืงืื ืื ืืจืื ืขื ืืืืืจืื, ืื ืื ื ืขืกืืง ืืืืืจ ืื. ืืืจืชื ืืฉืคื ืืืจืืื. ืืืื ืกืงืจืืคื ืืืืงื ืฉืคืฉืื ืืขืืื ืืืืจืื ืืช ืืืืื ืืืืืขืช SOAP. ืืฉืื ืืฆืืื. ืืชื ืืืงื ืืช ืืงืืืฅ ื-flowFile ืืืขืืื ืืืชื, ืื ืชืฉืื ืฉืืชื ืฆืจืื ืืืืืืจ ืืืชื ืืฉื, ืืขืืืื. ืืื ืื, ืจืืื ืืฆืืื ืฉืื ืื ืืกืคืจืืืช ืืืืืืช. ืืืื ืืงืจืืช ืฉืขืืืื ืชืฆืืจื ืืืืื ืืช ืืืช ื-libs. ืืืกืจืื ื ืืกืฃ ืืื ืฉืืชืกืจืื ืืจืืืืข ืืื ืื ืงืฉื ืื ืืคืื ืืืืื. ืืฉ ืืจื ืืืชืืืจ ื-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)
}
ืืืขืฉื, ืืื ืืกืชืืืืช ืืืชืืื ืืืืฉืืช ืฉื ืืจืืืืข. ืืืืจ ืืื, ืืงืืืฅ ืืืขืืืื ืืืขืืจ ืืจืืืืข, ืืฉืจ ืืืจืื ืขื ืฉืืืืช ืืงืืืฅ ืืฉืจืช. ืืืื ืืืืืจืืช ืขืืืจ ืืจืืืืข ืืื.
ืื ื ืืชืืจืื ืืช ืืฉืืื ืฉืื ืชืืขืืจ ืืืืขืช SOAP. ืื ืื ื ืืืชืืื ืืืคื. ืืฉืื ืืื ืืชื ืฆืจืื ืืฆืืื ืฉืื SOAP.
ืืืกืฃ ืืกืคืจ ืืืคืืื ืื ืืืื ืืืจื ืืคืขืืื (soapAction). ืื ืื ื ืฉืืืจืื ืืืืืงืื. ืชืืื ืืจืืืช ืคืจืืื ื ืืกืคืื ืืืฆื ืืฉืืื ืืงืฉืืช SOAP
ืืืงื ื ืืกืคืจ ืืคืฉืจืืืืช ืืฉืืืืฉ ืืชืืืืื NIFI. ืืื ืื ืืงืืืืื ืืื ืืจืืงืฆืื ืืื ืืชืืขืืช ืืืืืชืืช ืฉืืื? ืืืืืืืืช ืื ืืฉืืืช ืื ืืืื ืืื ืืขื ืฉืื ืืช ืืื ืฉืงืืจื ืืคืืขื ืืงืจื. ืื ื ืืงืืื ืฉืืืืจ ืื ืืืื ืืขื ืฉืืืืฉื ืขืืืจ ืืคืชืืื. ืชืืื ืื ืขื ืชืฉืืืช ืืื. ืื ืืฉ ืื ืฉืืืืช, ืชืืชืื. ืื ื ืื ืกื ืืขื ืืช.
ืืงืืจ: www.habr.com