Http NiFi中的重试和失败队列优先级

Http NiFi中的重试和失败队列优先级,http,error-handling,apache-nifi,Http,Error Handling,Apache Nifi,我在NiFi有一个队列,其中包含将通过API查询(invokeHTTP)处理的项目。可以对这些项目进行处理并返回正确的答案和数据(状态200)、找不到它们(状态404)以及失败(状态500)。 然而,在状态404和500的情况下,可能会出现误报,因此如果我再次查阅给出错误的相同数据,它将返回状态200。但有些情况下确实存在失败,而不是假阴性 因此,我创建了一个重试和失败队列,让他们再次进入involeHTTP并查阅API。我将过期时间设置为5分钟,这样真正有问题的数据就不会永远咨询API 但是

我在NiFi有一个队列,其中包含将通过API查询(invokeHTTP)处理的项目。可以对这些项目进行处理并返回正确的答案和数据(状态200)、找不到它们(状态404)以及失败(状态500)。 然而,在状态404和500的情况下,可能会出现误报,因此如果我再次查阅给出错误的相同数据,它将返回状态200。但有些情况下确实存在失败,而不是假阴性

因此,我创建了一个重试和失败队列,让他们再次进入involeHTTP并查阅API。我将过期时间设置为5分钟,这样真正有问题的数据就不会永远咨询API

但是,我想对这个失败和重试队列进行优先级排序,以便在数据到达时,API会在标准处理队列前面再次查询它,以免丢失导致误判的数据


是否可以使用此自我关系进行此处理,或者是否需要一个新的流文件?

每个队列都可以在队列的设置上配置优先级。目前,InvokeHttp有两个单独的队列,失败/重试队列和EvaluateJsonPath匹配关系中的传入队列。您需要在InvokeHttp前面放置一个漏斗,并将这两个队列发送到漏斗,然后将漏斗发送到InvokeHttp。通过这种方式,您可以创建一个传入队列来调用EHTTP,并在那里配置优先级设置器


为了正确地划分优先级,您可能需要使用流文件属性优先级器。您可以使用UpdateAttribute为每个流文件添加一个“优先级”属性,失败/重试的文件获得优先级“a”,其他文件获得优先级“B”(或在a之后排序的任何文件)。

每个队列都可以在队列的设置上配置优先级设置器。目前,InvokeHttp有两个单独的队列,失败/重试队列和EvaluateJsonPath匹配关系中的传入队列。您需要在InvokeHttp前面放置一个漏斗,并将这两个队列发送到漏斗,然后将漏斗发送到InvokeHttp。通过这种方式,您可以创建一个传入队列来调用EHTTP,并在那里配置优先级设置器


为了正确地划分优先级,您可能需要使用流文件属性优先级器。您可以使用UpdateAttribute为每个流文件添加一个“priority”属性,失败/重试的文件获得priority“a”,其他文件获得priority“B”(或在a之后排序的任何文件)。

该策略非常有趣。但是,我如何确保真正给出错误的数据不是假阴性,这样它就不会永远咨询API?你会使用文件路由吗?将“失败”和“重试”分开的目的是“失败”不应该起作用,所以通常你不会在循环中路由回这个,但我想可能你有一个时间问题,有些东西还没有准备好?我猜您可以在属性中创建一个重试计数器,在X次重试后将其路由到其他位置,但方法仍然是准确的-我的错误处理基本上是API有时返回错误(500),但如果您再次发出请求,它将返回成功(200)。最大的问题是,当数据到达invokeHTTP时,它只是一个没有其他属性的字符串。谢谢你的帖子。这个策略很有趣。但是,我如何确保真正给出错误的数据不是假阴性,这样它就不会永远咨询API?你会使用文件路由吗?将“失败”和“重试”分开的目的是“失败”不应该起作用,所以通常你不会在循环中路由回这个,但我想可能你有一个时间问题,有些东西还没有准备好?我猜您可以在属性中创建一个重试计数器,在X次重试后将其路由到其他位置,但方法仍然是准确的-我的错误处理基本上是API有时返回错误(500),但如果您再次发出请求,它将返回成功(200)。最大的问题是,当数据到达invokeHTTP时,它只是一个没有其他属性的字符串。谢谢你的来信。