하나의 트랜잭션에 여러 메시지를 사용하여 성능을 향상 시키려고하므로 onMessage 메서드에서 메시지를 사용하려고합니다.MDB의 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
}
}
죄송합니다.이 태그를 실수로 추가합니다. – dmiandre
onMessage() 메서드를 호출하는 목적이 메시지를 전달하기 때문에 MDB의 onMessage() 내에서 소비자를 만들고 메시지를받을 특별한 이유가 있습니까? 전화를 다시받는 이유는 무엇입니까? – Shashi
예, 그렇습니다. 성능을 향상시키기 위해 하나의 트랜잭션에서 여러 메시지를 가져와야합니다. 나는 다른 옵션에 대해 몰라. – dmiandre