使用Camel和ActiveMQ,如何确保我的消费者完全耗尽队列,然后停止?

时间:2019-04-03 09:48:13

标签: apache-camel

我有一个用例,需要定期清除ActiveMQ队列中的所有内容,然后停止。我找不到在本地骆驼中执行此操作的任何方法,因此我使用DefaultConsumerTemplate编写了一个Bean来执行此操作。

-bash: [: missing `]'
-bash: a: command not found
-bash: a: command not found

我尝试使用public void pollConsumer() throws Exception { long count = 0; try { if ( consumerEndpoint == null ) consumerEndpoint = consumer.getCamelContext().getEndpoint( endpointUri ); logger.debug( "Consuming: " + consumerEndpoint.getEndpointUri() ); consumer.start(); producer.start(); while ( true ) { logger.trace("Awaiting message: " + ++count ); Exchange exchange = consumer.receive( consumerEndpoint, 10000 ); if ( exchange == null ) break; logger.trace("Processing message: " + count ); producer.send( exchange ); consumer.doneUoW( exchange ); logger.trace("Processed message: " + count ); } producer.stop(); consumer.stop(); logger.debug( "Consumed " + (count - 1) + " message" + ( count == 2 ? "." : "s." ) ); } catch ( Throwable t ) { logger.error("Something went wrong!", t ); throw t; } } ,但这通常无法检索任何内容,并且肯定不会耗尽队列。当我尝试将等待时间减少到1000ms时,该过程通过排空队列而达到了极限,然后停止,因为超时已被激活。

我(显然是错误地)理解,等待时间是消费者要消费的东西,但是看来,即使消费者要消费东西,如果它不能立即交付,{{ 1}}失败,甚至可能在短时间内失败。

是否有更好的方法来确保我获得当前队列中的所有消息,然后停止?

谢谢!

0 个答案:

没有答案