【问题标题】:How to resume a suspended Camel consumer如何恢复暂停的骆驼消费者
【发布时间】:2020-06-02 08:27:08
【问题描述】:

我创建了一个RoutePolicy,当路由中发生可配置数量的错误时,它会暂停消费者。

在我暂停消费者之前,我想确保它会在可配置的时间量(例如暂停后 30 分钟)后恢复

实现这一目标的最佳方法是什么?

  • 我尝试使用 RoutePolicy 的onExchangeBegin 方法。但是在测试中我发现当路由暂停时它不再执行(正如我假设的那样)。
  • 我尝试在暂停路由之前创建一个SimpleScheduledRoutePolicy,但我没有找到在 Camel 上下文(由 Spring 支持)中注册这个新 Bean 的方法。
  • 因此,我目前创建了一个TimerTask,它向Camel Control Bus 发送一条消息以恢复路由。这行得通,但感觉有点陌生,因为 Camel 不知道此类简历任务。
  • 还有其他更“骆驼原生”的方式来实现我的目标吗?

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    在暂停消费者之前,您可以创建一个虚拟文件。

    使用过滤器对虚拟文件进行另一个路由轮询,以检查它是否是在 30 分钟前创建的。比如:

    from("file:dummyLocation?include=.dummy&delete=true&filter=#filterFileOlderThanThirtyMins)
    .to("controlbus:route?routeId=suspendedRoute&action=start")
    

    不过,这只是我的想法!

    【讨论】:

    • 我认为文件系统是“不可靠的”,因为它是一个共享存储。文件可能会被其他进程意外删除,文件可能会被阻止等。但非常感谢您的创意!
    • 是的。明白了。好吧,这个怎么样。就在您暂停消费者之前,您开始另一条路线,延迟 30 分钟。在延迟结束时,您使用 controlbus 开始您暂停的路线。路由重启后,停止定时器路由!
    • 你的想法很丰富! :-) 但是,RoutePolicy 可以应用于任意数量的路由。所以我的策略必须为每个可暂停的路由创建和管理(启动/停止)一个 TimerRoute。更糟糕的是:使用 RoutePolicyFactory 我可以将策略应用于上下文中的所有路由。所以这将成为递归,因为我的策略创建了工厂应用策略的 TimerRoutes。通过应用策略 TimerRoutes 为 TimerRoutes 创建 ... 等等。
    猜你喜欢
    • 1970-01-01
    • 2013-06-03
    • 2015-08-27
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多