我有一个队列,我需要根据特定的时间段消费消息。比方说,每五分钟我需要开始消费消息并处理它们。目前我使用计时器来触发路由并处理消息,但下面的代码不起作用。
以下代码来自我的蓝图
路线:
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>
答案 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模式,了解如何向“控制总线”发送消息。终点并让它开始/停止旋转。