我有一个用例,需要定期清除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}}失败,甚至可能在短时间内失败。
是否有更好的方法来确保我获得当前队列中的所有消息,然后停止?
谢谢!