2013-01-09 51 views
0

我在ActiveMq中有4个队列,每个队列的消息应该发送到外部服务,从队列中接收消息,我使用的是Apache Camel,并且我正在限制消息。 但我这里的问题是针对不同的队列,我有不同的社交时间,例如, 队列1消息应该只在上午6点至下午5点之间发送, 应该仅在上午10点至下午10点之间发送队列2消息。基于时间间隔的节流

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

让我知道是否有人没有清除我的问题。 ThankU提前。

回答

0
  1. 每个队列/间隔设置一条路由。
  2. 使用Quartz timers在那些应该启动/停止路线的小时内触发。
  3. 您可以让Quartz路由使用control bus模式来启动/停止队列路由。
2

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

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

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

+0

我对上面提到的链接有了一些想法,但我实际上想知道像: 我的新要求:在activeMq中只有1个队列,并且我有不同的社交小时数。例如,在周一,我必须从上午10点到晚上8点以及周二上午10点到下午6点接听消息。在不同的日子,我有不同的时间。所以你可以建议我如何解决这个问题。 – siddu

+0

我想这样做 CronScheduledRoutePolicy policy = new CronScheduledRoutePolicy(); \t \t String routeStartTime =“0 0 12 * *?”; \t \t String routeStopTime =“0 0 24 * *?”; \t \t policy.setRouteStartTime(routeStartTime); \t \t policy.setRouteStopTime(routeStopTime); (“activemq:queue:notificationServiceSMSQueue”)。routeId(“o2sms”)。routePolicy(policy).throttle(throttledSmsCount)\t .timePeriodMillis(throttledSmsDuration).to(“smsMessageProcessor”); \t \t routeStartTime和routeStopTime我会根据星期几的时间得到它。 如果不是建议一些更好的方法,是否需要继续进行。 – siddu