我希望一旦失败就终止invokhttp
处理器,因为我使用ExecuteStreamCommand
处理器我用这样的代码制作了bat文件:
curl http://localhost:8080/nifi-api/controller/process-groups/root/processors/f511a6a1-015d-1000-970e-969eac1e6fc5'-X PUT -H 'Accept: application/json'-d @stop.json -vv
我有相关的json文件,代码如下:
{
"status": {
"runStatus": "STOPPED"
},
"component": {
"state": "STOPPED",
"id": "f511a6a1-015d-1000-970e-969eac1e6fc5"
},
"id": "f511a6a1-015d-1000-970e-969eac1e6fc5",
"revision": {
"version": 30,
"clientId": "0343f0b9-015e-1000-7cd8-570f8953ec11"
}
}
我使用jso
文件作为ExecuteStreamCommand
处理器内部命令的参数,它会抛出这样的异常:
答案 0 :(得分:1)
你可以通过网络浏览器在nifi中通过nifi-api完成的所有nifi操作。
F12
激活DevTools
(其他浏览器也有此选项)copy -> copy as cUrl (bash)
现在你在剪贴板中有curl命令,通过调用nifi-api重复相同的nifi动作
您可以删除所有标题参数(-H),但不包括:-H 'Content-Type: application/json'
所以我的处理器的停止操作将如下所示:
curl 'http://localhost:8080/nifi-api/processors/d03bbf8b-015d-1000-f7d6-2f949d44cb7f' -X PUT -H 'Content-Type: application/json' --data-binary '{"revision":{"clientId":"09dbb50e-015e-1000-787b-058ed0938d0e","version":1},"component":{"id":"d03bbf8b-015d-1000-f7d6-2f949d44cb7f","state":"STOPPED"}}'
小心!每次更改处理器(甚至状态)时,其版本都会发生变化。
所以在发送stop
请求之前,您必须获取当前版本&状态。
您必须将GET请求发送到与上述相同的网址,而不需要任何其他标头:
http://localhost:8080/nifi-api/processors/d03bbf8b-015d-1000-f7d6-2f949d44cb7f
其中d03bbf8b-015d-1000-f7d6-2f949d44cb7f
是处理器的ID。
您可以在浏览器中尝试此网址,但替换其中的处理器ID。
响应将在json中。
{"revision":
{"clientId":"09dbb50e-015e-1000-787b-058ed0938d0e","version":4},
"id":"d03bbf8b-015d-1000-f7d6-2f949d44cb7f",
"uri":
...a lot of information here about this processor...
}
您可以从结果中获取clientId
和version
,并使用这些属性构建正确的STOP
请求。
PS:
ExecuteStreamCommand
将流文件作为输入流传输到执行命令中,这可能会导致问题
ExecuteProcess
因为您将所有参数传递给命令行中的curl而不是通过输入流。InvokeHTTP (get current state)
- > EvaluateJsonPath (extract version and clientId)
- > ReplaceText (build json for stop using attrs from prev step)
- > InvokeHTTP (call stop)
答案 1 :(得分:0)
这里是模板,显示如何停止invokehttp处理器: https://www.dropbox.com/s/uv14kuvk2evy9an/StopInvokeHttpPoceesor.xml?dl=0