ActiveMQ:如何根据指定的时间段使用队列中的消息

时间:2015-07-30 20:53:11

标签: java apache-camel activemq blueprint-osgi

我有一个队列,我需要根据特定的时间段消费消息。比方说,每五分钟我需要开始消费消息并处理它们。目前我使用计时器来触发路由并处理消息,但下面的代码不起作用。

以下代码来自我的蓝图

路线:

timer value =“timer:// errorMessageProcessorTimer?period = 120000”

errorqueue.in value =“activemq:Q.ERROR”

<camelContext xmlns="http://camel.apache.org/schema/blueprint">

    <route id="errorNotificationFilterRoute">
        <from uri="{{timer}}"/>
        <to uri="direct:processErrorMessage"/>
    </route>        

    <route id="processErrorMessage">
        <from uri="direct:processErrorMessage"/>
        <from uri="{{errorqueue.in}}" />
        <log loggingLevel="INFO" logName="errormessage" message="Error Notification Queue reading the error message..." />
        <filter>
            <simple>${body} contains 'xxxxx'</simple>
            <to uri="file:C:\\datafiles\\output"/>
            <log loggingLevel="INFO" logName="errormessage" message="Error message processed succesfully...." />          
        </filter>
   </route>

</camelContext>

2 个答案:

答案 0 :(得分:0)

一条路线中不可能有两个from标签!

看看Enterprise Integration Patterns。有一种叫做Throttler的东西。也许这有助于你。

  

Throttler模式允许您确保特定端点不会过载,或者我们不会超过与某些外部服务达成一致的SLA。

<route id="processErrorMessage">
  <from uri="{{errorqueue.in}}" />
  <!-- throttle 3 messages per 10 sec -->
  <throttle maximumRequestsPerPeriod="3" timePeriodMillis="10000">
  <log loggingLevel="INFO" logName="errormessage" message="Error Notification Queue reading the error message..." />
</route>

答案 1 :(得分:0)

请参阅控制总线EIP模式,了解如何向“控制总线”发送消息。终点并让它开始/停止旋转。