1 つのトランザクションで複数のメッセージを使用してパフォーマンスを向上させたいため、onMessage メソッドでメッセージを消費しようとしています。
しかし
Message message = consumer.receive();
null を返します。ブロックもしません。なぜ買う?メッセージを受け取るまでブロックする必要がありますね。
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
QueueConnection queueConnection = null;
queueConnection = qcf.createQueueConnection();
queueConnection.start();
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = queueSession.createQueue(sessionConnParams.toString());
consumer = queueSession.createConsumer(queue);
// it works in cycle
System.out.println("before receive");
Message message = consumer.receive();
System.out.println("after receive");
if (message == null) {
System.out.println("no messages");
return;
}
// process message
} catch (Exception e) {
// process exception
} finally {
// close objects
}
}