1

私はSpringでApacheActiveMQを使用しています.....私が直面している問題は、Machine1などの1つのマシンでプロデューサーを作成し、Machine2などの2番目のマシンで1つのコンシューマーを作成していることです... 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);
4

1 に答える 1

2

その場合には 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){

}
于 2012-07-31T08:09:51.520 に答える