1
我第一次使用JMS并使用Glassfish 3.1.1。我已成立了一个JMS连接工厂: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
我已经部署了战争与接受一个文件,分析它,将内容保存到一个数据库,一个servlet 。如果这是所有成功的将消息发送到队列:
@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();
}
我有一个MDB应当听取队列和actioning消息已部署的耳朵:
@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耳朵,它应该开始接收消息。有没有我错过的配置步骤?
有什么方法可以确认在servlet中生成的消息是否首先将其发送到队列中?在任何日志中都没有错误,包括server.log。
您好,感谢您的建议。它实际上是在消费这个消息(我已经了解了非常方便的imqcmd实用程序)。这个问题与日志记录有关。 log4配置文件从ejb jar移动到耳朵中,我们失去了日志记录,所以它显示它没有使用这些消息。很好地捕捉到丢失的MessageListener接口。我已经添加了它,虽然它不在那里似乎没有影响任何东西。 – sdoca