我在Spring上使用Apache Active MQ .....我面临的问题是我在一台机器上创建生产者,比如说Machine1,而我在第二台机器上创建一个使用者,比如说Machine2 ...
我通过调用一个简单的servlet调用在Machine1上创建生产者,然后在Machine2上创建使用者。
我面临的问题是,无论如何,如果我的生产者无法在指定的持续时间内发送任何数据包,那么我想从Machine2中删除我的使用者和队列...
无论如何,如果我没有在指定的持续时间内从生产者那里得到任何数据包,我可以将我的使用者和队列设置为自动删除并执行一些业务逻辑。
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,ConnectorURL);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(queueID+"");
connection = connectionFactory.createConnection();
connection.start();
consumer = session.createConsumer(destination);
基本上,这段代码为我的应用程序创建了消费者。...然后,我将此消费者分配给我的应用程序侦听器,该侦听器在生产者向消费者发送任何消息时进行监听。...
ScenarioExecutionQueueListenerImpl executionQueueListener = new ScenarioExecutionQueueListenerImpl(scenario,result, host);
beanFactory.autowireBean(executionQueueListener);
connection.setExceptionListener(executionQueueListener);
Message message = consumer.receive();
consumer.setMessageListener(executionQueueListener);
executionQueueListener.setConsumer(consumer);
executionQueueListener.onMessage(message);
最佳答案
在那种情况下,我不会设置一个消息侦听器,而只是使用consumer.receive()方法。 MessageListener更适合与时间无关/异步消耗。
public void run(){
Message m = consumer.receive(timeout_value_in_millisec);
if( m != null ){
// got a message, handle it.
processMessage(msg);
}else{
// no message received in specified time,
}
// close session, connection etc.
}
public void processMessage(Message msg){
}