[jboss-user] [Messaging, JMS & JBossMQ] - Multiple messages are getting lost in each queueReceiver.rec

MainakB do-not-reply at jboss.com
Mon Apr 9 14:07:07 EDT 2007


I am using JBOSS Messaging 1.0.1.GA. with JBOSS 4.0.5 GA and not using transacted session. I am trying to fetch messages from a pre-configured Queue in CLIENT_ACKNOWLEDGE_MODE. The queue had already a large number of message say 40000. Each time I use queueReceiver.receive(), multiple messages are getting lost. 

That is even before explict acknowledgement, the message count in JBOSS Queue decreases by 80/100.

Please have a look at the following Snippet :

public class Consumer {

	public static void main(String[] args) 
	{
		QueueConnection qConnection =null;
		QueueSession queueSession=null;
		Queue queue=null;
		QueueReceiver queueReceiver=null;
		ObjectMessage message;
		try
		{
			qConnection=createConnection("queue/XMLQueue");
			queueSession = RequestSender.getQueueSessionClient(qConnection,"queue/XMLQueue");
			queue=createQueue("queue/XMLQueue");
			queueReceiver=queueSession.createReceiver(queue);
			
			for(int i=0;i<114;i++)
			{
				message=getNewMessage(qConnection,queueReceiver);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if( qConnection != null )
			{
				try
				{
					// Closing the queueReceiver, queueSession & qConnection					
				}
				catch(Exception jMSException)
				{
					jMSException.printStackTrace();
				}
			}
		}
	}
	public static ObjectMessage getNewMessage(QueueConnection qConnection,QueueReceiver queueReceiver)
	{
		ObjectMessage message=null;
		try
		{
			System.out.println("Just Before Receive -"+queueReceiver);
			qConnection.start();
			Message msg = queueReceiver.receive(1000);
			// Here we found more than one messages are being lost. We put a delay and monitored the Queue Depth.			System.out.println("Just After Received -"+msg);
			qConnection.stop();
			if (msg instanceof ObjectMessage)
			{
				message = (ObjectMessage) msg;
			}
			
		}
		catch(JMSException jMSException)
		{
			jMSException.printStackTrace();
		}
		catch(Exception exception)
		{
			exception.printStackTrace();
		}
		return message;
	}
	public static QueueConnection createConnection()
	{
		QueueConnection queueConnection = null;			
		// Creates a Queue Connection and return the session
		try
		{
			// Create a Queue Connection
			queueConnection = queueConnectionFactory.createQueueConnection();
		}
		catch(JMSException jMSException)
		{
			jMSException.printStackTrace();
		}
		return queueConnection;
	}
	public static QueueSession getQueueSessionClient(QueueConnection qConnection,String prefix) throws JMSException
	{
		QueueSession qSession = null;
		try
		{
			if( qConnection == null )
			{
				qConnection = createConnection();
			}
			if( null != qConnection )
			{
				qSession = qConnection.createQueueSession(false,Session.CLIENT_ACKNOWLEDGE);
			}
		}
		catch(JMSException jMSException)
		{
			throw jMSException;
		}
		return qSession;
	}
	public static Queue createQueue(String queueName) throws Exception
	{
		String queueName = null;		
		Queue queue = null;
		try
		{
			if(queueNameQueueMap.containsKey(queueName))
			{
				queue=queueNameQueueMap.get(queueName);
			}
			else
			{
				Queue queueLookedUp = (Queue) jndiContext.lookup(queueName);
				queue=queueLookedUp;
				queueNameQueueMap.put(queueName,queueLookedUp);				
			}
		}
		catch(NamingException namingException)
		{
			throw namingException;
		}
		return queue;
	}
}

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4035777#4035777

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4035777



More information about the jboss-user mailing list