2015-11-05 17 views
0

我试图推迟一条消息排队几秒钟。 但是,当我使用骆驼延迟选项时,它不会在队列中延迟,而是立即消耗,并延迟路径路径。 我们如何才能延迟消息,让他们在队列中等待几秒?如何在侦听器使用camel接收它之前将队列中的JMS消息延迟?

我的春天与骆驼配置看起来像下面。

<bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> 
    <property name="connectionFactory" ref="jmsConnectionFactory" /> 
</bean> 

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

    <route id="routeOne" delayer="10000">    
     <from uri="jms://queueone?concurrentConsumers=1"/>   
     <log message="routeOne incoming message ${body}"/>    
     <delay><constant>30000</constant></delay>      
     <process ref="loggerProcessor"/>       
    </route> 

</camelContext> 

<bean id="loggerProcessor" name="loggerProcessor" class="emh.LoggerProcessor"/> 
+0

某些JMS实现支持延迟消息传递。你在使用哪一个? – Nicholas

回答

0

骆驼已经内置了调节器拍打支持,有一个节流部件。请参考:http://camel.apache.org/throttler.html

只需在路由中添加以下内容并延迟消息。

<throttle timePeriodMillis="30000"> 
+0

油门正在从队列中提取消息并将其保留在路由交换中并等待延迟。如果我们在延迟之前关闭应用程序,那么我们将丢失该消息 – Gnana

相关问题