2017-08-08 27 views
3

是否可以在NIFI處理器中使用xmlHttpRequest來調用遠程休息服務?在我的情況下,ExecuteScript處理器(使用Javascript)無法評估XMLHttpRequest;有沒有類似的解決方案可以用來獲取響應數據?如何在NiFi中調用遠程REST服務

var OutputStreamCallback = Java.type("org.apache.nifi.processor.io.OutputStreamCallback"); 
var StandardCharsets = Java.type("java.nio.charset.StandardCharsets"); 

Date.prototype.isValid = function() { 
    return (Object.prototype.toString.call(this) === "[object Date]") 
     && !isNaN(this.getTime()); 
}; 

var flowFile = session.get(); 

if (flowFile != null) { 
    var fromDate = flowFile.getAttribute('fromDate') 
    var uid = flowFile.getAttribute('uid') 

    var xmlhttp = null; 
    var result = null; 

     xmlhttp = new XMLHttpRequest(); 
     if (typeof xmlhttp.overrideMimeType != 'undefined') { 
      xmlhttp.overrideMimeType('application/json'); 

    } else if (window.ActiveXObject) { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open('GET', "similar url here WorkInfo?dateFrom=?&uid=?", true); 
    xmlhttp.send(dateFrom, uid); 
    if (xmlhttp.status == 200) { 
     result = 'WorkInfoDate' 
    } 
    flowFile = session.putAttribute(flowFile, 'filename', fromDate + '_' + result); 

    flowFile = session.write(flowFile, 
     new OutputStreamCallback(function (outputStream) { 
      outputStream.write(command.getBytes(StandardCharsets.UTF_8)) 
     })); 

    session.transfer(flowFile, REL_SUCCESS) 
} 

回答

1

有可用於調用REST服務,而無需編寫任何代碼InvokeHttp處理器:

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.3.0/org.apache.nifi.processors.standard.InvokeHTTP/index.html

從服務的響應將被寫入到流文件的內容。

+0

我曾經想過這個nifi處理器,但在這種情況下,我無法想象如何在我的情況下通過並更改參數(這對獲取方法是必不可少的),它們每分鐘都會變化 –

+2

URL屬性支持表達式語言所以你可以有一個url:http:// someservice?param1 = $ {v1}&param2 = $ {v2},然後你可以在這個處理器之前使用UpdateAttribute將v1和v2設置爲屬性。 –