【问题标题】:Throttling based on time interval基于时间间隔的节流
【发布时间】:2012-12-23 02:53:36
【问题描述】:

我在 ActiveMQ 中有 4 个队列,每个队列的消息都应该发送到外部服务,以便从队列中提取消息我正在使用 Apache Camel,并且我正在限制消息。
但我的问题是对于不同的队列,我有不同的社交时间。例如
队列 1 消息应仅在上午 6 点到下午 5 点之间发送,
队列 2 消息应该只在上午 10 点到晚上 10 点之间发送。

所以我想知道我们如何使用 Apache 骆驼节流来处理这个问题。或者请给我一些解决方案。

如果有人没有解决我的问题,请告诉我。提前致谢。

【问题讨论】:

    标签: java activemq apache-camel


    【解决方案1】:

    Camel 允许您将路由与路由策略相关联。我们有一个开箱即用的策略,它基于骆驼石英并且是基于计划的。这允许您为路线的开放时间设置政策。

    文档从这里开始:http://camel.apache.org/routepolicy。并且有从该页面指向基于调度程序的策略的链接。

    注意有一张票 - http://issues.apache.org/jira/browse/CAMEL-5929 - 关于如果您重新启动应用服务器,那么如果您在开放时间内启动,则不会启动路由。例如,你有 12 点到 6 点。然后您在下午 3 点重新启动应用程序(例如中间)。然后我第二天开始的路线。如果在打开的窗口内启动,票证允许您配置强制启动。

    【讨论】:

    • 我对你上面提到的链接有一些想法,但我实际上想知道:我的新要求:activeMq 中只有 1 个队列,并且我根据星期几有不同的社交时间.例如,周一我必须从上午 10 点到晚上 8 点和周二上午 10 点到下午 6 点等接收消息。在不同的日子,我有不同的时间安排。所以你能建议我如何解决这个问题。
    • 我想过这样做 CronScheduledRoutePolicy policy = new CronScheduledRoutePolicy();字符串 routeStartTime = "0 0 12 * * ?";字符串 routeStopTime = "0 0 24 * * ?"; policy.setRouteStartTime(routeStartTime); policy.setRouteStopTime(routeStopTime); from("activemq:queue:notificationServiceSMSQueue").routeId("o2sms").routePolicy(policy).throttle(throttledSmsCount) .timePeriodMillis(throttledSmsDuration).to("smsMessageProcessor"); routeStartTime 和 routeStopTime 我将根据星期几的时间得到它。如果没有建议一些更好的方法,它是一种传统的方法吗?
    【解决方案2】:
    1. 为每个队列/间隔设置一条路线。
    2. 使用在应该开始/停止路线的时间触发的Quartz timers
    3. 您可以让 Quartz 路由使用control bus 模式来启动/停止队列路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多