Apache ActiveMQ回退机制

时间:2012-07-31 05:30:34

标签: java spring activemq

我正在使用带有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);

1 个答案:

答案 0 :(得分:1)

我不会为该情况设置messagelistener,而只是使用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){

}