【问题标题】:Pause File Processing In Camel?在骆驼中暂停文件处理?
【发布时间】:2020-06-10 16:33:11
【问题描述】:

我有一个看起来像这样的路由,第一条路由从文件中读取

from("file:verylargefile.csv")
.multicast()
.parallelProcessing()
.to(directEndpoint)).end()


from(directEndpoint)
   .routeId(routeId)
   .routePolicy(routePolicy)
   .process(proxyFieldProcessor)
   .marshal().json(JsonLibrary.Jackson)
   .to(http-endpoint);

如果来自其他端点的错误响应太多,我需要暂停文件处理。我在第二条路由上使用自定义路由策略,这确实暂停了第二条路由,但第一条路由继续向第二条路由发送消息,导致org.apache.camel.component.direct.DirectConsumerNotAvailableException

有没有其他方法可以在骆驼中暂停文件处理?

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    实现这一点的一种方法是在第二条路由中实现一个错误处理程序,它使用 ControlBus 组件来挂起第一个:

    controlbus:route?routeId=foo&action=suspend
    

    【讨论】:

    • 感谢您的响应,第一个路由是文件处理路由,如果我尝试暂停该路由,它会在暂停前运行到完成,它会读取一个非常大的文件
    • 在我看来这是由于 Camel 处理 Inflight Exchanges graceful 的默认行为,与关闭策略有关,请参阅 camel.apache.org/manual/latest/graceful-shutdown.html
    • 是的,暂停第一条路由不是一个选项,这就是为什么我尝试暂停第二条路由,使其从第一条路由交换,但第一条路由在第二条路由暂停后继续向第二条路由发送消息,这就是为什么我收到 DirectConsumerNotAvailableException
    • 我原来的回答提到了你关于如何中断文件处理的问题。如前所述,这只能在 Camel 的约束范围内干净地完成。由于在第一条路由上已经有一个 Exchange 正在处理,所以它必须被处理,即使它失败了。根据当前的路线设置,这在我看来是预期的行为。除了您最初的问题,您当然可以探索其他替代方案,例如使用 redeliveryDelayredeliveryPolicyProfile
    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多