Hi, all
I have three queues, all of them are serviced by the same MDB class. Each queue processing needs certain external resources, different for each queue. All messages are object messages. All messages use auto_acknowledge mode. There is a situation happens from time to time when resource is not available for one of queues (for an hour or more), so MDB can't successfully finish onMessage event, in which case MDB just creates new ObjectMessage with the same object and headers and redelivers it in the same queue. When it happens, messages from this queue get redelivered to the same queue very quickly for a long period of time. This can happen only for one queue from those three.
What happens is that after some time of working in this mode two other queues get blocked, any attempt to send message to those two queues hang in this place forewer (well, at least for hours)
org.jboss.mq.il.uil2.SocketManager
private void internalSendMessage
........
if (waitOnReply)
{ // Send a request msg and wait for the reply
synchronized (msg)
{
// Create the request msgID
msg.getMsgID();
if (trace)
log.trace("Begin internalSendMessage, round-trip msg=" + msg);
// Place the msg into the write queue and reply map
replyMap.put(msg, msg);
sendQueue.put(msg);
// Wait for the msg reply
msg.wait();
}
}
........
it blocks on msg.wait(), so it never gets reply. Third queue (the one that gets quickly redelivered) works fine. I don't set any priorities for queues, they are all by default.
Persistense is done on MySQL 5, MyISAM engine, so no transactions involved. JBoss 4.0.3SP1, EJB 2.1
I would be happy to post any excerpts from the code or configuration or debug stacks, it's just a lot of stuff and i'm not sure what would be relevant.
Any ideas about how it can be fixed or where should I look would be greatly appreciated
Why don't you reinsert the message with a delivery delay so you do not eat up your processor and possibly lock up your system.
jmsMsg.setLongProperty("JMS_JBOSS_SCHEDULED_DELIVERY", new Date()+60000); // delay the redelivery of the message by one minute