저는 처음으로 JMS를 사용하고 있으며 Glassfish 3.1.1을 사용하고 있습니다.JMS/Glassfish - 대기열 메시지를 사용하지 않는 MDB
Pool Name: jms/QueueConnectionFactory
JNDI Name: jms/QueueConnectionFactory
Resource Type: javax.jms.QueueConnectionFactory
과 대상 자원 : 내가 파일을 받아이를 분석하고 데이터베이스에 내용을 저장하는 서블릿과 전쟁을 배포 한
JNDI Name: jms/ProcessBatchQueue
Physical Destination: ProcessBatchQueue
Resource Type: javax.jms.Queue
나는 JMS 연결 팩토리를 설정 한 . 내가 대기열을 듣고 메시지 actioning해야 MDB와 배포 된 귀를 가지고
@Resource(lookup = "jms/ProcessBatchQueue")
private Queue processBatchQueue;
private void sendProcessBatchMessage(String batchID) throws JMSException
{
log.info("Attempting to send process batch message for batch ID: "
+ batchID);
Connection jmsConnection = connectionFactory.createConnection();
Session jmsSession = jmsConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
TextMessage message = jmsSession.createTextMessage();
message.setText(batchID);
MessageProducer msgProducer = jmsSession.createProducer(processBatchQueue);
msgProducer.send(message);
jmsConnection.close();
}
:이 모든 성공하면이 큐에 메시지 전송에
@MessageDriven(mappedName = "jms/ProcessBatchQueue")
public class BatchReceiver
{
private final Logger log = LoggerFactory.getLogger(BatchReceiver.class);
public void onMessage(Message message)
{
log.info("Received message from jms/ProcessBatchQueue: " + message);
try
{
if (message instanceof TextMessage)
{
String batchId = ((TextMessage) message).getText();
// do processing
}
else
{
log.error("Received invalid message type from jms/ProcessBatchQueue");
}
}
catch (Exception ex)
{
String error = "Received error '" + ex.toString()
+ "' retrieving message from jms/BatchProcessingTopic.";
Throwable linkedEx = ex.getCause();
if (linkedEx != null)
{
log.error(error += "Linked exception: " + linkedEx.getMessage(),
linkedEx);
}
else
{
log.error(error + ", " + ex.getMessage(), ex);
}
}
}
}
을 내 전쟁 로그, 나는
log.info("Attempting to send process batch message for batch ID: " + batchID);
문을 얻을 수 있지만, 귀 로그에, 나는 MDB가 메시지를 받고 있음을 나타냅니다 아무것도 얻을 수 없다.
내 이해는 "그냥"MDB와 귀를 배포 할 수 있어야하며 메시지를 받기 시작합니다. 놓친 구성 단계가 있습니까?
서블릿에서 생성 된 메시지가 처음에 대기열에 있는지 확인하는 방법이 있습니까? server.log를 포함하여 모든 로그에 오류가 없습니다.
안녕하세요 제안에 대한 감사 . 실제로 메시지를 사용하고있었습니다 (저는 매우 유용한 imqcmd 유틸리티에 대해 배웠습니다). 이 문제는 로깅과 관련이 있습니다. log4 설정 파일은 ejb jar에서 귀에 옮겨졌고 로깅을 잃어서 메시지를 소비하지 않는 것처럼 보였습니다. 누락 된 MessageListener 인터페이스를 제대로 파악합니다. 거기에 없었더라도 아무 것도 영향을 미치지 않았지만 추가했습니다. – sdoca