【问题标题】:Stopping Camel Route when no more message in ActiveMQ当 ActiveMQ 中没有消息时停止 Camel Route
【发布时间】:2019-12-27 16:07:42
【问题描述】:

如果我们在 ActiveMQ 中没有更多消息,是否有一种方法可以停止 Camel 路由?我需要的场景。

  1. 从 ActiveMQ 队列中获取所有消息并进行处理。
  2. 再轮询 2-3 次以检查我们是否还有其他新消息,如果是,请执行步骤 #1。
  3. 如果当前没有消息停止路由并在 5 分钟后重新启动(我猜这可以通过轮询策略来实现)。

【问题讨论】:

  • 您能否解释一下您为什么要这样做?消息传递应用程序通常是事件驱动的,即当消息到达时,它会被处理。您描述的消息轮询方法可能是可能的,但它以某种方式“伤害了概念”,因此您需要做更多的工作。
  • 据我了解,Camel ActiveMQ 组件轮询队列,并且由于我们的应用程序在云中,我们希望最小化轮询

标签: apache-camel activemq spring-jms


【解决方案1】:

看看this answer。它使用调度程序和轮询策略 (POJO) 轮询队列。

  • 使用调度程序,您可以选择轮询间隔
  • 随着轮询策略消费者的超时,您可以停止消费(例如,如果 5 秒内没有消息到达,则队列可能为空)

如果你想完全停止/启动消费者,你可以添加Camel Control Bus。然后,您可以启动和停止消费者路线。

【讨论】:

  • 嗨@burki,谢谢,但我尝试了你分享的方法,但如果我们有单个并发消费者,它将在 5 秒内仅消耗 1 条消息,并等待轮询获取更多消息,我正在寻找的更像是退避策略
  • 这很奇怪,由于接收循环,链接答案的消费者应该消费所有排队的消息。那么当你设置定时器周期为5m(5分钟)时,消费者在5分钟内只消费了1条消息?示例中 3 秒的超时应该足以消耗已排队的消息。仅当队列为空时才会发生超时。
猜你喜欢
  • 2023-01-17
  • 2022-01-19
  • 2019-04-02
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多