嗨, 我在一个独立的nifi实例上创建了handlehttprequest处理器,该实例由计时器驱动,并发任务设置为1,运行计划为0。我正在用邮递员或任何浏览器的请求访问我的Web服务。处理器的输出队列最初只有一个条目,但大约一分钟后变为2。我已经在单个节点以及群集nifi实例上看到了此问题。有人可以指点吗
Nifi版本:1.7.0
更新1:我观察到,如果在一定时间内未到达http响应流,则会使用相同的参数生成一个新的http请求。这是预期的吗?如果可以,我该如何避免呢?
更新2:我们已经看到,第二个流文件恰好在60秒后生成。不知道是哪种配置设置的。
更新3:我刚刚看到我们使用的StandardHttpContextMap具有一个属性:Request Expiration,默认将其设置为1分钟。该文档指出:“指定从缓存中逐出HTTP请求并以服务不可用状态代码进行响应之前,应保留多长时间的HTTP请求”。如果增加此值,可以看到没有其他重复的值。所以现在我知道为什么会这样了,但是不确定为什么会这样。为什么在转发队列中还有另一个条目。
答案 0 :(得分:3)
您缺少 HandleHttpResponse 处理程序。从 HandleHttpRequest 处理器读取请求后,您必须将响应发送回客户端(在本例中为邮递员)。如果邮递员在60秒钟内未收到任何响应,它将因超时而重试。
请参阅我创建的此流程。
HandleHttpResponse 处理器的成功队列将具有相同的流文件。有时,您可能需要执行某些操作,然后才能将响应发送给客户端。在这种情况下,请勿将 HandleHttpResponse 处理器直接连接到 HandleHttpRequest 处理器。完成操作后,请确保在超时之前使用HandleHttpResponse处理器将响应发送给客户端。
答案 1 :(得分:0)
我也有同样的问题。我立即使用了 HandleHttpResponse ,但这并没有阻止我的第二次尝试。经过研究,我发现大多数浏览器都建立了第二个连接。当我使用SOAP UI或Postman进行尝试时,我没有任何问题,所以我确定我的案例与浏览器有关。 我们可能需要弄弄 HandleHttpRequest 的调度参数,或者我们可以使用 DetectDuplicate 处理器来防止执行第二个调用。
编辑:我对这个问题进行了更多调查,发现其中一个请求的“ http.request.url”属性具有“ http://localhost:8011/favicon.ico”值,并且另一个有“ http://localhost:8011”。