【问题标题】:Retry and Failure queue prioritization in NiFiNiFi中的重试和失败队列优先级
【发布时间】:2021-01-27 22:23:13
【问题描述】:

我在 NiFi 有一个队列,其中包含将通过 API 查询 (invokeHTTP) 处理的项目。可以处理这些项目并正确返回带有数据的答案(状态 200),找不到它们(状态 404),也可以失败(状态 500)。 但是,在状态 404 和 500 的情况下,可能会发生误报,所以如果我再次查询相同的数据,它会返回错误状态,它会返回状态 200。假阴性。

所以我创建了一个重试队列,让他们再次输入 involeHTTP 并查询 API 失败。我设置了 5 分钟的过期时间,以便真正有问题的数据不会永远咨询 API。

但是,我想优先考虑这个Failure and Retry队列,这样当数据到达它时,会在API中再次查询它,在标准处理队列之前,以免丢失数据给出了假阴性。

是否可以对这种自我关系进行这种处理,还是需要一个新的流文件?

【问题讨论】:

    标签: http error-handling apache-nifi


    【解决方案1】:

    每个队列都可以在队列设置中配置一个优先级。目前,您有两个独立的 InvokeHttp 队列,失败/重试队列和来自 EvaluateJsonPath 匹配关系的传入队列。您需要在 InvokeHttp 前面放置一个漏斗,并将这两个队列发送到漏斗,然后将漏斗发送到 InvokeHttp。这样您就可以为 InvokeHttp 创建一个传入队列并在那里配置优先级。

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

    【讨论】:

    • 这个策略非常有趣。但是我如何确保真正给出错误的数据不是假阴性,这样它就不会永远咨询 API?你会使用文件路由吗?
    • 好吧,有单独的“失败”和“重试”的重点是“失败”不应该工作,所以通常你不会在循环中将它路由回去,但我想也许你有一个时间问题,有些东西还没有准备好?我想你可以在一个属性中创建一个重试计数器,然后在 X 次重试后将它路由到其他地方
    • 旧帖,但方法仍然准确 - kisstechdocs.wordpress.com/2015/01/15/…
    • 我的错误处理基本上是API有时会返回错误(500),但如果您再次发出请求,它会返回成功(200)。最大的问题是invokeHTTP中数据到达时,它只是一个没有其他属性的字符串。谢谢你的帖子。
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2012-02-24
    相关资源
    最近更新 更多