You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Steven Van Loon <st...@invenso.com> on 2008/05/09 11:35:56 UTC

Expired messages

Hi,

 

Does anybody knows whether and how it is possible to act on expired
messages?

 

Thanks!

Steven.


RE: Expired messages

Posted by Steven Van Loon <st...@invenso.com>.
Ok, thanks a lot! Will keep an eye on it.

Steven.


-----Original Message-----
From: Rob Davies [mailto:rajdavies@gmail.com] 
Sent: maandag 19 mei 2008 15:46
To: users@activemq.apache.org
Subject: Re: Expired messages

No - this one https://issues.apache.org/activemq/browse/AMQ-1112
Will get round to it when i get a chance

On 19 May 2008, at 14:32, Steven Van Loon wrote:

> I assume you are referring to this one?
> https://issues.apache.org/activemq/browse/SM-872
>
> Any chance for it to be implemented soon?
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: maandag 19 mei 2008 13:39
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
> Ah - penny drops - I see what you mean now. There's an outstanding
> enhancement (can't get access to jira at the moment) - to optionally
> allow for messages to actively be expired from in-flight or from the
> store instead of waiting for message consumption to trigger the
> expiration - you'll have to wait for it to be implemented!
>
> cheers,
>
> Rob
>
> http://open.iona.com/products/enterprise-activemq
> http://rajdavies.blogspot.com/
>
> On 19 May 2008, at 12:25, Steven Van Loon wrote:
>
>>
>> Still no success on this one...
>>
>> I was able to create the following small testcase.
>>
>> First, make sure DLQ are enabled in the activemq.xml configuration
>> file:
>> <policyEntry queue=">" memoryLimit="5mb">
>>   <deadLetterStrategy>
>>     <individualDeadLetterStrategy queuePrefix="DLQ."
>> useQueueForQueueMessages="true"/>
>>   </deadLetterStrategy>
>> </policyEntry>
>>
>> (I use individual DLQ's only for simplicity, same results with a
>> shared
>> DLQ)
>>
>> When I run the test with CREATE_CONSUMER = false, a message is
>> placed on
>> the queue MY.QUEUE and it stays there forever.
>>
>> When I run the test with CREATE_CONSUMER = true, the expired message
>> is
>> moved to the DLQ.MY.QUEUE the moment the consumer is created (not  
>> when
>> the message actually expires)
>>
>> Also when you browse the queue MY.QUEUE when it contains an expired
>> message (e.g. via http://localhost:8161/admin/queues.jsp), the  
>> expired
>> message is moved to the DLQ the moment the queue is browsed. I  
>> already
>> tried to create a plugin for activemq which iterates each second over
>> all messages in all queues to force the expiration of messages. No
>> success on this one either. It works when there are no consumers at
>> all
>> listening on the queue, the moment, another consumer is listening to
>> the
>> queue, the expired messages will stay on the queue.
>>
>> Is there anyone who has suggestions what to try next?
>>
>>
>> import java.util.Properties;
>>
>> import javax.jms.DeliveryMode;
>> import javax.jms.JMSException;
>> import javax.jms.Message;
>> import javax.jms.MessageConsumer;
>> import javax.jms.Queue;
>> import javax.jms.QueueConnection;
>> import javax.jms.QueueConnectionFactory;
>> import javax.jms.QueueSender;
>> import javax.jms.QueueSession;
>> import javax.naming.Context;
>> import javax.naming.InitialContext;
>> import javax.naming.NamingException;
>>
>> public class TestCase {
>>
>>
>> 	public final static String INITIAL_CONTEXT_FACTORY =
>> "org.apache.activemq.jndi.ActiveMQInitialContextFactory";
>> 	public final static String PROVIDER_URL =
>> "tcp://localhost:61616";
>> 	public static final String CONNECTION_FACTORY =
>> "ConnectionFactory";
>> 	public final static String QUEUE_NAME = "MY.QUEUE";
>>
>> 	public final static int MESSAGE_TTL = 1000; // milliseconds
>>
>> 	public final static boolean CREATE_CONSUMER = false;
>>
>> 	public static void main(String[] args) {
>>
>> 		QueueConnection queueConnection = null;
>> 		QueueSession queueSession = null;
>> 		Queue queue = null;
>> 		try {
>> 			QueueConnectionFactory queueConnectionFactory =
>> (QueueConnectionFactory) jndiLookup(CONNECTION_FACTORY);
>> 			queueConnection =
>> queueConnectionFactory.createQueueConnection();
>> 			queueConnection.start();
>> 			queueSession =
>> queueConnection.createQueueSession(false,
>> 					DeliveryMode.NON_PERSISTENT);
>> 			queue = queueSession.createQueue(QUEUE_NAME);
>>
>> 			// Send a message
>> 			System.out.println("Creating sender to " +
>> queue.getQueueName());
>> 			QueueSender queueSender =
>> queueSession.createSender(queue);
>> 			Message message =
>> queueSession.createTextMessage("This is a test");
>> 			message.setJMSCorrelationID("CID:1");
>> 			queueSender.send(message,
>> DeliveryMode.PERSISTENT, 5, MESSAGE_TTL);
>> 			System.out.println("Message sent to " +
>> queue.getQueueName());
>>
>> 			if (CREATE_CONSUMER) {
>> 				// Wait until message is expired
>> 				Thread.sleep(MESSAGE_TTL + 100);
>>
>> 				// Receive that message --> this should
>> hang the process since
>> 				// the message will be expired at this
>> moment.
>> 				// Check out the queue
>> (http://localhost:8161/admin/queues.jsp)
>> 				System.out.println("Creating receiver on
>> "
>> 						+ queue.getQueueName());
>> 				System.out
>> 						.println("It will hang
>> because no message will be available");
>> 				MessageConsumer consumer =
>> queueSession.createConsumer(queue);
>> 				Message received = consumer.receive();
>> 				if (received != null) {
>> 					System.out.println("Received
>> message unexpectedly!!");
>> 				}
>> 			} else {
>> 				// When no consumer is defined, the
>> expired message will stay
>> 				// forever on the queue instead of being
>> moved to the DLQ
>> 			}
>>
>> 		} catch (Exception e) {
>> 			System.err.println("Problem occurred: " +
>> e.getMessage());
>> 			e.printStackTrace();
>> 		} finally {
>> 			if (queueConnection != null) {
>> 				try {
>> 					queueConnection.stop();
>> 					queueConnection.close();
>> 				} catch (JMSException e) {
>> 				}
>> 			}
>>
>> 			if (queueSession != null) {
>> 				try {
>> 					queueSession.close();
>> 				} catch (JMSException e) {
>> 				}
>> 			}
>> 		}
>> 	}
>>
>> 	public static Object jndiLookup(String name) throws
>> NamingException {
>> 		Context ctxt = getJndiContext();
>> 		return ctxt.lookup(name);
>> 	}
>>
>> 	public static Context getJndiContext() throws NamingException {
>> 		Context jndiContext = null;
>> 		Properties props = new Properties();
>> 		props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
>> 				INITIAL_CONTEXT_FACTORY);
>> 		props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);
>> 		jndiContext = new InitialContext(props);
>> 		return jndiContext;
>> 	}
>> }
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: Rob Davies [mailto:rajdavies@gmail.com]
>> Sent: donderdag 15 mei 2008 19:02
>> To: users@activemq.apache.org
>> Subject: Re: Expired messages
>>
>> will look into it!
>>
>> cheers,
>>
>> Rob
>>
>> http://open.iona.com/products/enterprise-activemq
>> http://rajdavies.blogspot.com/
>>
>> On 15 May 2008, at 13:04, Steven Van Loon wrote:
>>
>>> Thanks for the reply Rob.
>>>
>>> The DLQ seems to be the queue to look for indeed, but it seems that
>>> the
>>> expired messages are not send to this queue the moment they actually
>>> expire.
>>>
>>> I have created the following test scenario:
>>>
>>> - I create a receiver for queue://ActiveMQ.DLQ and start it up
>>> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
>>> between two receive's (Thread.sleep(1000) after 1 message reception)
>>> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms
>>> which
>>> will send 10 messages
>>> - I start the receiver for queue://MY.QUEUE.C
>>> - I start the producer for queue://MY.QUEUE.C
>>>
>>> After running this, I see this:
>>>
>>> ActiveMQ.DLQ 	
>>> 	Number Of Pending Messages : 0
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 0
>>> 	Messages Received: 0
>>> MY.QUEUE.C
>>> 	Number Of Pending Messages : 9
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 10
>>> 	Messages Received: 1
>>>
>>> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ
>>> has
>>> received nothing.
>>>
>>> When I run my test an second time, I get the following stats:
>>>
>>> ActiveMQ.DLQ 	
>>> 	Number Of Pending Messages : 0
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 9
>>> 	Messages Received: 9
>>> MY.QUEUE.C
>>> 	Number Of Pending Messages : 9
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 20
>>> 	Messages Received: 2
>>>
>>> Which means the DLQ consumer has received the expired messages of my
>>> first run and the expired message of the second run are not sent to
>>> the
>>> DLQ. (confirmed by my logging).
>>>
>>> Now, how can this be avoided? I want the expired messages to be sent
>>> immediately to the DLQ.
>>>
>>> Anybody any ideas?
>>>
>>> Thanks!
>>> Steven.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Rob Davies [mailto:rajdavies@gmail.com]
>>> Sent: maandag 12 mei 2008 9:21
>>> To: users@activemq.apache.org
>>> Subject: Re: Expired messages
>>>
>>>
>>> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>> Does anybody knows whether and how it is possible to act on expired
>>>> messages?
>>>>
>>>>
>>>>
>>>> Thanks!
>>>>
>>>> Steven.
>>>>
>>>
>>> Expired messages have taken too long to deliver to a consumer - they
>>> are sent to a dead letter queue - see
>>> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
>>> or you can listen for advisories - see
>>> http://activemq.apache.org/advisory-message.html
>>>
>>>
>>>
>>>
>>> cheers,
>>>
>>> Rob
>>>
>>> http://open.iona.com/ -Enterprise Open Integration
>>> http://rajdavies.blogspot.com/
>>>
>>>
>>>
>>
>>
>>
>>
>>
>
>
>
>
>
>
>


Re: Expired messages

Posted by Rob Davies <ra...@gmail.com>.
No - this one https://issues.apache.org/activemq/browse/AMQ-1112
Will get round to it when i get a chance

On 19 May 2008, at 14:32, Steven Van Loon wrote:

> I assume you are referring to this one?
> https://issues.apache.org/activemq/browse/SM-872
>
> Any chance for it to be implemented soon?
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: maandag 19 mei 2008 13:39
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
> Ah - penny drops - I see what you mean now. There's an outstanding
> enhancement (can't get access to jira at the moment) - to optionally
> allow for messages to actively be expired from in-flight or from the
> store instead of waiting for message consumption to trigger the
> expiration - you'll have to wait for it to be implemented!
>
> cheers,
>
> Rob
>
> http://open.iona.com/products/enterprise-activemq
> http://rajdavies.blogspot.com/
>
> On 19 May 2008, at 12:25, Steven Van Loon wrote:
>
>>
>> Still no success on this one...
>>
>> I was able to create the following small testcase.
>>
>> First, make sure DLQ are enabled in the activemq.xml configuration
>> file:
>> <policyEntry queue=">" memoryLimit="5mb">
>>   <deadLetterStrategy>
>>     <individualDeadLetterStrategy queuePrefix="DLQ."
>> useQueueForQueueMessages="true"/>
>>   </deadLetterStrategy>
>> </policyEntry>
>>
>> (I use individual DLQ's only for simplicity, same results with a
>> shared
>> DLQ)
>>
>> When I run the test with CREATE_CONSUMER = false, a message is
>> placed on
>> the queue MY.QUEUE and it stays there forever.
>>
>> When I run the test with CREATE_CONSUMER = true, the expired message
>> is
>> moved to the DLQ.MY.QUEUE the moment the consumer is created (not  
>> when
>> the message actually expires)
>>
>> Also when you browse the queue MY.QUEUE when it contains an expired
>> message (e.g. via http://localhost:8161/admin/queues.jsp), the  
>> expired
>> message is moved to the DLQ the moment the queue is browsed. I  
>> already
>> tried to create a plugin for activemq which iterates each second over
>> all messages in all queues to force the expiration of messages. No
>> success on this one either. It works when there are no consumers at
>> all
>> listening on the queue, the moment, another consumer is listening to
>> the
>> queue, the expired messages will stay on the queue.
>>
>> Is there anyone who has suggestions what to try next?
>>
>>
>> import java.util.Properties;
>>
>> import javax.jms.DeliveryMode;
>> import javax.jms.JMSException;
>> import javax.jms.Message;
>> import javax.jms.MessageConsumer;
>> import javax.jms.Queue;
>> import javax.jms.QueueConnection;
>> import javax.jms.QueueConnectionFactory;
>> import javax.jms.QueueSender;
>> import javax.jms.QueueSession;
>> import javax.naming.Context;
>> import javax.naming.InitialContext;
>> import javax.naming.NamingException;
>>
>> public class TestCase {
>>
>>
>> 	public final static String INITIAL_CONTEXT_FACTORY =
>> "org.apache.activemq.jndi.ActiveMQInitialContextFactory";
>> 	public final static String PROVIDER_URL =
>> "tcp://localhost:61616";
>> 	public static final String CONNECTION_FACTORY =
>> "ConnectionFactory";
>> 	public final static String QUEUE_NAME = "MY.QUEUE";
>>
>> 	public final static int MESSAGE_TTL = 1000; // milliseconds
>>
>> 	public final static boolean CREATE_CONSUMER = false;
>>
>> 	public static void main(String[] args) {
>>
>> 		QueueConnection queueConnection = null;
>> 		QueueSession queueSession = null;
>> 		Queue queue = null;
>> 		try {
>> 			QueueConnectionFactory queueConnectionFactory =
>> (QueueConnectionFactory) jndiLookup(CONNECTION_FACTORY);
>> 			queueConnection =
>> queueConnectionFactory.createQueueConnection();
>> 			queueConnection.start();
>> 			queueSession =
>> queueConnection.createQueueSession(false,
>> 					DeliveryMode.NON_PERSISTENT);
>> 			queue = queueSession.createQueue(QUEUE_NAME);
>>
>> 			// Send a message
>> 			System.out.println("Creating sender to " +
>> queue.getQueueName());
>> 			QueueSender queueSender =
>> queueSession.createSender(queue);
>> 			Message message =
>> queueSession.createTextMessage("This is a test");
>> 			message.setJMSCorrelationID("CID:1");
>> 			queueSender.send(message,
>> DeliveryMode.PERSISTENT, 5, MESSAGE_TTL);
>> 			System.out.println("Message sent to " +
>> queue.getQueueName());
>>
>> 			if (CREATE_CONSUMER) {
>> 				// Wait until message is expired
>> 				Thread.sleep(MESSAGE_TTL + 100);
>>
>> 				// Receive that message --> this should
>> hang the process since
>> 				// the message will be expired at this
>> moment.
>> 				// Check out the queue
>> (http://localhost:8161/admin/queues.jsp)
>> 				System.out.println("Creating receiver on
>> "
>> 						+ queue.getQueueName());
>> 				System.out
>> 						.println("It will hang
>> because no message will be available");
>> 				MessageConsumer consumer =
>> queueSession.createConsumer(queue);
>> 				Message received = consumer.receive();
>> 				if (received != null) {
>> 					System.out.println("Received
>> message unexpectedly!!");
>> 				}
>> 			} else {
>> 				// When no consumer is defined, the
>> expired message will stay
>> 				// forever on the queue instead of being
>> moved to the DLQ
>> 			}
>>
>> 		} catch (Exception e) {
>> 			System.err.println("Problem occurred: " +
>> e.getMessage());
>> 			e.printStackTrace();
>> 		} finally {
>> 			if (queueConnection != null) {
>> 				try {
>> 					queueConnection.stop();
>> 					queueConnection.close();
>> 				} catch (JMSException e) {
>> 				}
>> 			}
>>
>> 			if (queueSession != null) {
>> 				try {
>> 					queueSession.close();
>> 				} catch (JMSException e) {
>> 				}
>> 			}
>> 		}
>> 	}
>>
>> 	public static Object jndiLookup(String name) throws
>> NamingException {
>> 		Context ctxt = getJndiContext();
>> 		return ctxt.lookup(name);
>> 	}
>>
>> 	public static Context getJndiContext() throws NamingException {
>> 		Context jndiContext = null;
>> 		Properties props = new Properties();
>> 		props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
>> 				INITIAL_CONTEXT_FACTORY);
>> 		props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);
>> 		jndiContext = new InitialContext(props);
>> 		return jndiContext;
>> 	}
>> }
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: Rob Davies [mailto:rajdavies@gmail.com]
>> Sent: donderdag 15 mei 2008 19:02
>> To: users@activemq.apache.org
>> Subject: Re: Expired messages
>>
>> will look into it!
>>
>> cheers,
>>
>> Rob
>>
>> http://open.iona.com/products/enterprise-activemq
>> http://rajdavies.blogspot.com/
>>
>> On 15 May 2008, at 13:04, Steven Van Loon wrote:
>>
>>> Thanks for the reply Rob.
>>>
>>> The DLQ seems to be the queue to look for indeed, but it seems that
>>> the
>>> expired messages are not send to this queue the moment they actually
>>> expire.
>>>
>>> I have created the following test scenario:
>>>
>>> - I create a receiver for queue://ActiveMQ.DLQ and start it up
>>> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
>>> between two receive's (Thread.sleep(1000) after 1 message reception)
>>> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms
>>> which
>>> will send 10 messages
>>> - I start the receiver for queue://MY.QUEUE.C
>>> - I start the producer for queue://MY.QUEUE.C
>>>
>>> After running this, I see this:
>>>
>>> ActiveMQ.DLQ 	
>>> 	Number Of Pending Messages : 0
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 0
>>> 	Messages Received: 0
>>> MY.QUEUE.C
>>> 	Number Of Pending Messages : 9
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 10
>>> 	Messages Received: 1
>>>
>>> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ
>>> has
>>> received nothing.
>>>
>>> When I run my test an second time, I get the following stats:
>>>
>>> ActiveMQ.DLQ 	
>>> 	Number Of Pending Messages : 0
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 9
>>> 	Messages Received: 9
>>> MY.QUEUE.C
>>> 	Number Of Pending Messages : 9
>>> 	Number Of Consumers: 1
>>> 	Messages Sent: 20
>>> 	Messages Received: 2
>>>
>>> Which means the DLQ consumer has received the expired messages of my
>>> first run and the expired message of the second run are not sent to
>>> the
>>> DLQ. (confirmed by my logging).
>>>
>>> Now, how can this be avoided? I want the expired messages to be sent
>>> immediately to the DLQ.
>>>
>>> Anybody any ideas?
>>>
>>> Thanks!
>>> Steven.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: Rob Davies [mailto:rajdavies@gmail.com]
>>> Sent: maandag 12 mei 2008 9:21
>>> To: users@activemq.apache.org
>>> Subject: Re: Expired messages
>>>
>>>
>>> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>> Does anybody knows whether and how it is possible to act on expired
>>>> messages?
>>>>
>>>>
>>>>
>>>> Thanks!
>>>>
>>>> Steven.
>>>>
>>>
>>> Expired messages have taken too long to deliver to a consumer - they
>>> are sent to a dead letter queue - see
>>> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
>>> or you can listen for advisories - see
>>> http://activemq.apache.org/advisory-message.html
>>>
>>>
>>>
>>>
>>> cheers,
>>>
>>> Rob
>>>
>>> http://open.iona.com/ -Enterprise Open Integration
>>> http://rajdavies.blogspot.com/
>>>
>>>
>>>
>>
>>
>>
>>
>>
>
>
>
>
>
>
>


RE: Expired messages

Posted by Steven Van Loon <st...@invenso.com>.
I assume you are referring to this one?
https://issues.apache.org/activemq/browse/SM-872

Any chance for it to be implemented soon?


-----Original Message-----
From: Rob Davies [mailto:rajdavies@gmail.com] 
Sent: maandag 19 mei 2008 13:39
To: users@activemq.apache.org
Subject: Re: Expired messages

Ah - penny drops - I see what you mean now. There's an outstanding  
enhancement (can't get access to jira at the moment) - to optionally  
allow for messages to actively be expired from in-flight or from the  
store instead of waiting for message consumption to trigger the  
expiration - you'll have to wait for it to be implemented!

cheers,

Rob

http://open.iona.com/products/enterprise-activemq
http://rajdavies.blogspot.com/

On 19 May 2008, at 12:25, Steven Van Loon wrote:

>
> Still no success on this one...
>
> I was able to create the following small testcase.
>
> First, make sure DLQ are enabled in the activemq.xml configuration  
> file:
> <policyEntry queue=">" memoryLimit="5mb">
>    <deadLetterStrategy>
>      <individualDeadLetterStrategy queuePrefix="DLQ."
> useQueueForQueueMessages="true"/>
>    </deadLetterStrategy>
> </policyEntry>
>
> (I use individual DLQ's only for simplicity, same results with a  
> shared
> DLQ)
>
> When I run the test with CREATE_CONSUMER = false, a message is  
> placed on
> the queue MY.QUEUE and it stays there forever.
>
> When I run the test with CREATE_CONSUMER = true, the expired message  
> is
> moved to the DLQ.MY.QUEUE the moment the consumer is created (not when
> the message actually expires)
>
> Also when you browse the queue MY.QUEUE when it contains an expired
> message (e.g. via http://localhost:8161/admin/queues.jsp), the expired
> message is moved to the DLQ the moment the queue is browsed. I already
> tried to create a plugin for activemq which iterates each second over
> all messages in all queues to force the expiration of messages. No
> success on this one either. It works when there are no consumers at  
> all
> listening on the queue, the moment, another consumer is listening to  
> the
> queue, the expired messages will stay on the queue.
>
> Is there anyone who has suggestions what to try next?
>
>
> import java.util.Properties;
>
> import javax.jms.DeliveryMode;
> import javax.jms.JMSException;
> import javax.jms.Message;
> import javax.jms.MessageConsumer;
> import javax.jms.Queue;
> import javax.jms.QueueConnection;
> import javax.jms.QueueConnectionFactory;
> import javax.jms.QueueSender;
> import javax.jms.QueueSession;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.naming.NamingException;
>
> public class TestCase {
>
>
> 	public final static String INITIAL_CONTEXT_FACTORY =
> "org.apache.activemq.jndi.ActiveMQInitialContextFactory";
> 	public final static String PROVIDER_URL =
> "tcp://localhost:61616";
> 	public static final String CONNECTION_FACTORY =
> "ConnectionFactory";
> 	public final static String QUEUE_NAME = "MY.QUEUE";
>
> 	public final static int MESSAGE_TTL = 1000; // milliseconds
>
> 	public final static boolean CREATE_CONSUMER = false;
>
> 	public static void main(String[] args) {
>
> 		QueueConnection queueConnection = null;
> 		QueueSession queueSession = null;
> 		Queue queue = null;
> 		try {
> 			QueueConnectionFactory queueConnectionFactory =
> (QueueConnectionFactory) jndiLookup(CONNECTION_FACTORY);
> 			queueConnection =
> queueConnectionFactory.createQueueConnection();
> 			queueConnection.start();
> 			queueSession =
> queueConnection.createQueueSession(false,
> 					DeliveryMode.NON_PERSISTENT);
> 			queue = queueSession.createQueue(QUEUE_NAME);
>
> 			// Send a message
> 			System.out.println("Creating sender to " +
> queue.getQueueName());
> 			QueueSender queueSender =
> queueSession.createSender(queue);
> 			Message message =
> queueSession.createTextMessage("This is a test");
> 			message.setJMSCorrelationID("CID:1");
> 			queueSender.send(message,
> DeliveryMode.PERSISTENT, 5, MESSAGE_TTL);
> 			System.out.println("Message sent to " +
> queue.getQueueName());
>
> 			if (CREATE_CONSUMER) {
> 				// Wait until message is expired
> 				Thread.sleep(MESSAGE_TTL + 100);
>
> 				// Receive that message --> this should
> hang the process since
> 				// the message will be expired at this
> moment.
> 				// Check out the queue
> (http://localhost:8161/admin/queues.jsp)
> 				System.out.println("Creating receiver on
> "
> 						+ queue.getQueueName());
> 				System.out
> 						.println("It will hang
> because no message will be available");
> 				MessageConsumer consumer =
> queueSession.createConsumer(queue);
> 				Message received = consumer.receive();
> 				if (received != null) {
> 					System.out.println("Received
> message unexpectedly!!");
> 				}
> 			} else {
> 				// When no consumer is defined, the
> expired message will stay
> 				// forever on the queue instead of being
> moved to the DLQ
> 			}
>
> 		} catch (Exception e) {
> 			System.err.println("Problem occurred: " +
> e.getMessage());
> 			e.printStackTrace();
> 		} finally {
> 			if (queueConnection != null) {
> 				try {
> 					queueConnection.stop();
> 					queueConnection.close();
> 				} catch (JMSException e) {
> 				}
> 			}
>
> 			if (queueSession != null) {
> 				try {
> 					queueSession.close();
> 				} catch (JMSException e) {
> 				}
> 			}
> 		}
> 	}
>
> 	public static Object jndiLookup(String name) throws
> NamingException {
> 		Context ctxt = getJndiContext();
> 		return ctxt.lookup(name);
> 	}
>
> 	public static Context getJndiContext() throws NamingException {
> 		Context jndiContext = null;
> 		Properties props = new Properties();
> 		props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
> 				INITIAL_CONTEXT_FACTORY);
> 		props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);
> 		jndiContext = new InitialContext(props);
> 		return jndiContext;
> 	}
> }
>
>
>
>
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: donderdag 15 mei 2008 19:02
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
> will look into it!
>
> cheers,
>
> Rob
>
> http://open.iona.com/products/enterprise-activemq
> http://rajdavies.blogspot.com/
>
> On 15 May 2008, at 13:04, Steven Van Loon wrote:
>
>> Thanks for the reply Rob.
>>
>> The DLQ seems to be the queue to look for indeed, but it seems that
>> the
>> expired messages are not send to this queue the moment they actually
>> expire.
>>
>> I have created the following test scenario:
>>
>> - I create a receiver for queue://ActiveMQ.DLQ and start it up
>> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
>> between two receive's (Thread.sleep(1000) after 1 message reception)
>> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms  
>> which
>> will send 10 messages
>> - I start the receiver for queue://MY.QUEUE.C
>> - I start the producer for queue://MY.QUEUE.C
>>
>> After running this, I see this:
>>
>> ActiveMQ.DLQ 	
>> 	Number Of Pending Messages : 0
>> 	Number Of Consumers: 1
>> 	Messages Sent: 0
>> 	Messages Received: 0
>> MY.QUEUE.C
>> 	Number Of Pending Messages : 9
>> 	Number Of Consumers: 1
>> 	Messages Sent: 10
>> 	Messages Received: 1
>>
>> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ
>> has
>> received nothing.
>>
>> When I run my test an second time, I get the following stats:
>>
>> ActiveMQ.DLQ 	
>> 	Number Of Pending Messages : 0
>> 	Number Of Consumers: 1
>> 	Messages Sent: 9
>> 	Messages Received: 9
>> MY.QUEUE.C
>> 	Number Of Pending Messages : 9
>> 	Number Of Consumers: 1
>> 	Messages Sent: 20
>> 	Messages Received: 2
>>
>> Which means the DLQ consumer has received the expired messages of my
>> first run and the expired message of the second run are not sent to
>> the
>> DLQ. (confirmed by my logging).
>>
>> Now, how can this be avoided? I want the expired messages to be sent
>> immediately to the DLQ.
>>
>> Anybody any ideas?
>>
>> Thanks!
>> Steven.
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: Rob Davies [mailto:rajdavies@gmail.com]
>> Sent: maandag 12 mei 2008 9:21
>> To: users@activemq.apache.org
>> Subject: Re: Expired messages
>>
>>
>> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>>
>>> Hi,
>>>
>>>
>>>
>>> Does anybody knows whether and how it is possible to act on expired
>>> messages?
>>>
>>>
>>>
>>> Thanks!
>>>
>>> Steven.
>>>
>>
>> Expired messages have taken too long to deliver to a consumer - they
>> are sent to a dead letter queue - see
>> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
>> or you can listen for advisories - see
>> http://activemq.apache.org/advisory-message.html
>>
>>
>>
>>
>> cheers,
>>
>> Rob
>>
>> http://open.iona.com/ -Enterprise Open Integration
>> http://rajdavies.blogspot.com/
>>
>>
>>
>
>
>
>
>








Re: Expired messages

Posted by Rob Davies <ra...@gmail.com>.
Ah - penny drops - I see what you mean now. There's an outstanding  
enhancement (can't get access to jira at the moment) - to optionally  
allow for messages to actively be expired from in-flight or from the  
store instead of waiting for message consumption to trigger the  
expiration - you'll have to wait for it to be implemented!

cheers,

Rob

http://open.iona.com/products/enterprise-activemq
http://rajdavies.blogspot.com/

On 19 May 2008, at 12:25, Steven Van Loon wrote:

>
> Still no success on this one...
>
> I was able to create the following small testcase.
>
> First, make sure DLQ are enabled in the activemq.xml configuration  
> file:
> <policyEntry queue=">" memoryLimit="5mb">
>    <deadLetterStrategy>
>      <individualDeadLetterStrategy queuePrefix="DLQ."
> useQueueForQueueMessages="true"/>
>    </deadLetterStrategy>
> </policyEntry>
>
> (I use individual DLQ's only for simplicity, same results with a  
> shared
> DLQ)
>
> When I run the test with CREATE_CONSUMER = false, a message is  
> placed on
> the queue MY.QUEUE and it stays there forever.
>
> When I run the test with CREATE_CONSUMER = true, the expired message  
> is
> moved to the DLQ.MY.QUEUE the moment the consumer is created (not when
> the message actually expires)
>
> Also when you browse the queue MY.QUEUE when it contains an expired
> message (e.g. via http://localhost:8161/admin/queues.jsp), the expired
> message is moved to the DLQ the moment the queue is browsed. I already
> tried to create a plugin for activemq which iterates each second over
> all messages in all queues to force the expiration of messages. No
> success on this one either. It works when there are no consumers at  
> all
> listening on the queue, the moment, another consumer is listening to  
> the
> queue, the expired messages will stay on the queue.
>
> Is there anyone who has suggestions what to try next?
>
>
> import java.util.Properties;
>
> import javax.jms.DeliveryMode;
> import javax.jms.JMSException;
> import javax.jms.Message;
> import javax.jms.MessageConsumer;
> import javax.jms.Queue;
> import javax.jms.QueueConnection;
> import javax.jms.QueueConnectionFactory;
> import javax.jms.QueueSender;
> import javax.jms.QueueSession;
> import javax.naming.Context;
> import javax.naming.InitialContext;
> import javax.naming.NamingException;
>
> public class TestCase {
>
>
> 	public final static String INITIAL_CONTEXT_FACTORY =
> "org.apache.activemq.jndi.ActiveMQInitialContextFactory";
> 	public final static String PROVIDER_URL =
> "tcp://localhost:61616";
> 	public static final String CONNECTION_FACTORY =
> "ConnectionFactory";
> 	public final static String QUEUE_NAME = "MY.QUEUE";
>
> 	public final static int MESSAGE_TTL = 1000; // milliseconds
>
> 	public final static boolean CREATE_CONSUMER = false;
>
> 	public static void main(String[] args) {
>
> 		QueueConnection queueConnection = null;
> 		QueueSession queueSession = null;
> 		Queue queue = null;
> 		try {
> 			QueueConnectionFactory queueConnectionFactory =
> (QueueConnectionFactory) jndiLookup(CONNECTION_FACTORY);
> 			queueConnection =
> queueConnectionFactory.createQueueConnection();
> 			queueConnection.start();
> 			queueSession =
> queueConnection.createQueueSession(false,
> 					DeliveryMode.NON_PERSISTENT);
> 			queue = queueSession.createQueue(QUEUE_NAME);
>
> 			// Send a message
> 			System.out.println("Creating sender to " +
> queue.getQueueName());
> 			QueueSender queueSender =
> queueSession.createSender(queue);
> 			Message message =
> queueSession.createTextMessage("This is a test");
> 			message.setJMSCorrelationID("CID:1");
> 			queueSender.send(message,
> DeliveryMode.PERSISTENT, 5, MESSAGE_TTL);
> 			System.out.println("Message sent to " +
> queue.getQueueName());
>
> 			if (CREATE_CONSUMER) {
> 				// Wait until message is expired
> 				Thread.sleep(MESSAGE_TTL + 100);
>
> 				// Receive that message --> this should
> hang the process since
> 				// the message will be expired at this
> moment.
> 				// Check out the queue
> (http://localhost:8161/admin/queues.jsp)
> 				System.out.println("Creating receiver on
> "
> 						+ queue.getQueueName());
> 				System.out
> 						.println("It will hang
> because no message will be available");
> 				MessageConsumer consumer =
> queueSession.createConsumer(queue);
> 				Message received = consumer.receive();
> 				if (received != null) {
> 					System.out.println("Received
> message unexpectedly!!");
> 				}
> 			} else {
> 				// When no consumer is defined, the
> expired message will stay
> 				// forever on the queue instead of being
> moved to the DLQ
> 			}
>
> 		} catch (Exception e) {
> 			System.err.println("Problem occurred: " +
> e.getMessage());
> 			e.printStackTrace();
> 		} finally {
> 			if (queueConnection != null) {
> 				try {
> 					queueConnection.stop();
> 					queueConnection.close();
> 				} catch (JMSException e) {
> 				}
> 			}
>
> 			if (queueSession != null) {
> 				try {
> 					queueSession.close();
> 				} catch (JMSException e) {
> 				}
> 			}
> 		}
> 	}
>
> 	public static Object jndiLookup(String name) throws
> NamingException {
> 		Context ctxt = getJndiContext();
> 		return ctxt.lookup(name);
> 	}
>
> 	public static Context getJndiContext() throws NamingException {
> 		Context jndiContext = null;
> 		Properties props = new Properties();
> 		props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
> 				INITIAL_CONTEXT_FACTORY);
> 		props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);
> 		jndiContext = new InitialContext(props);
> 		return jndiContext;
> 	}
> }
>
>
>
>
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: donderdag 15 mei 2008 19:02
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
> will look into it!
>
> cheers,
>
> Rob
>
> http://open.iona.com/products/enterprise-activemq
> http://rajdavies.blogspot.com/
>
> On 15 May 2008, at 13:04, Steven Van Loon wrote:
>
>> Thanks for the reply Rob.
>>
>> The DLQ seems to be the queue to look for indeed, but it seems that
>> the
>> expired messages are not send to this queue the moment they actually
>> expire.
>>
>> I have created the following test scenario:
>>
>> - I create a receiver for queue://ActiveMQ.DLQ and start it up
>> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
>> between two receive's (Thread.sleep(1000) after 1 message reception)
>> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms  
>> which
>> will send 10 messages
>> - I start the receiver for queue://MY.QUEUE.C
>> - I start the producer for queue://MY.QUEUE.C
>>
>> After running this, I see this:
>>
>> ActiveMQ.DLQ 	
>> 	Number Of Pending Messages : 0
>> 	Number Of Consumers: 1
>> 	Messages Sent: 0
>> 	Messages Received: 0
>> MY.QUEUE.C
>> 	Number Of Pending Messages : 9
>> 	Number Of Consumers: 1
>> 	Messages Sent: 10
>> 	Messages Received: 1
>>
>> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ
>> has
>> received nothing.
>>
>> When I run my test an second time, I get the following stats:
>>
>> ActiveMQ.DLQ 	
>> 	Number Of Pending Messages : 0
>> 	Number Of Consumers: 1
>> 	Messages Sent: 9
>> 	Messages Received: 9
>> MY.QUEUE.C
>> 	Number Of Pending Messages : 9
>> 	Number Of Consumers: 1
>> 	Messages Sent: 20
>> 	Messages Received: 2
>>
>> Which means the DLQ consumer has received the expired messages of my
>> first run and the expired message of the second run are not sent to
>> the
>> DLQ. (confirmed by my logging).
>>
>> Now, how can this be avoided? I want the expired messages to be sent
>> immediately to the DLQ.
>>
>> Anybody any ideas?
>>
>> Thanks!
>> Steven.
>>
>>
>>
>>
>>
>>
>>
>> -----Original Message-----
>> From: Rob Davies [mailto:rajdavies@gmail.com]
>> Sent: maandag 12 mei 2008 9:21
>> To: users@activemq.apache.org
>> Subject: Re: Expired messages
>>
>>
>> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>>
>>> Hi,
>>>
>>>
>>>
>>> Does anybody knows whether and how it is possible to act on expired
>>> messages?
>>>
>>>
>>>
>>> Thanks!
>>>
>>> Steven.
>>>
>>
>> Expired messages have taken too long to deliver to a consumer - they
>> are sent to a dead letter queue - see
>> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
>> or you can listen for advisories - see
>> http://activemq.apache.org/advisory-message.html
>>
>>
>>
>>
>> cheers,
>>
>> Rob
>>
>> http://open.iona.com/ -Enterprise Open Integration
>> http://rajdavies.blogspot.com/
>>
>>
>>
>
>
>
>
>








RE: Expired messages

Posted by Steven Van Loon <st...@invenso.com>.
Still no success on this one...

I was able to create the following small testcase.

First, make sure DLQ are enabled in the activemq.xml configuration file:
<policyEntry queue=">" memoryLimit="5mb">
    <deadLetterStrategy>
      <individualDeadLetterStrategy queuePrefix="DLQ."
useQueueForQueueMessages="true"/>
    </deadLetterStrategy>
</policyEntry>

(I use individual DLQ's only for simplicity, same results with a shared
DLQ)

When I run the test with CREATE_CONSUMER = false, a message is placed on
the queue MY.QUEUE and it stays there forever.

When I run the test with CREATE_CONSUMER = true, the expired message is
moved to the DLQ.MY.QUEUE the moment the consumer is created (not when
the message actually expires)

Also when you browse the queue MY.QUEUE when it contains an expired
message (e.g. via http://localhost:8161/admin/queues.jsp), the expired
message is moved to the DLQ the moment the queue is browsed. I already
tried to create a plugin for activemq which iterates each second over
all messages in all queues to force the expiration of messages. No
success on this one either. It works when there are no consumers at all
listening on the queue, the moment, another consumer is listening to the
queue, the expired messages will stay on the queue.

Is there anyone who has suggestions what to try next? 


import java.util.Properties;

import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class TestCase {


	public final static String INITIAL_CONTEXT_FACTORY =
"org.apache.activemq.jndi.ActiveMQInitialContextFactory";
	public final static String PROVIDER_URL =
"tcp://localhost:61616";
	public static final String CONNECTION_FACTORY =
"ConnectionFactory";
	public final static String QUEUE_NAME = "MY.QUEUE";

	public final static int MESSAGE_TTL = 1000; // milliseconds

	public final static boolean CREATE_CONSUMER = false;

	public static void main(String[] args) {

		QueueConnection queueConnection = null;
		QueueSession queueSession = null;
		Queue queue = null;
		try {
			QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory) jndiLookup(CONNECTION_FACTORY);
			queueConnection =
queueConnectionFactory.createQueueConnection();
			queueConnection.start();
			queueSession =
queueConnection.createQueueSession(false,
					DeliveryMode.NON_PERSISTENT);
			queue = queueSession.createQueue(QUEUE_NAME);

			// Send a message
			System.out.println("Creating sender to " +
queue.getQueueName());
			QueueSender queueSender =
queueSession.createSender(queue);
			Message message =
queueSession.createTextMessage("This is a test");
			message.setJMSCorrelationID("CID:1");
			queueSender.send(message,
DeliveryMode.PERSISTENT, 5, MESSAGE_TTL);
			System.out.println("Message sent to " +
queue.getQueueName());

			if (CREATE_CONSUMER) {
				// Wait until message is expired
				Thread.sleep(MESSAGE_TTL + 100);

				// Receive that message --> this should
hang the process since
				// the message will be expired at this
moment.
				// Check out the queue
(http://localhost:8161/admin/queues.jsp)
				System.out.println("Creating receiver on
"
						+ queue.getQueueName());
				System.out
						.println("It will hang
because no message will be available");
				MessageConsumer consumer =
queueSession.createConsumer(queue);
				Message received = consumer.receive();
				if (received != null) {
					System.out.println("Received
message unexpectedly!!");
				}
			} else {
				// When no consumer is defined, the
expired message will stay
				// forever on the queue instead of being
moved to the DLQ
			}

		} catch (Exception e) {
			System.err.println("Problem occurred: " +
e.getMessage());
			e.printStackTrace();
		} finally {
			if (queueConnection != null) {
				try {
					queueConnection.stop();
					queueConnection.close();
				} catch (JMSException e) {
				}
			}

			if (queueSession != null) {
				try {
					queueSession.close();
				} catch (JMSException e) {
				}
			}
		}
	}

	public static Object jndiLookup(String name) throws
NamingException {
		Context ctxt = getJndiContext();
		return ctxt.lookup(name);
	}

	public static Context getJndiContext() throws NamingException {
		Context jndiContext = null;
		Properties props = new Properties();
		props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
				INITIAL_CONTEXT_FACTORY);
		props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);
		jndiContext = new InitialContext(props);
		return jndiContext;
	}
}






-----Original Message-----
From: Rob Davies [mailto:rajdavies@gmail.com] 
Sent: donderdag 15 mei 2008 19:02
To: users@activemq.apache.org
Subject: Re: Expired messages

will look into it!

cheers,

Rob

http://open.iona.com/products/enterprise-activemq
http://rajdavies.blogspot.com/

On 15 May 2008, at 13:04, Steven Van Loon wrote:

> Thanks for the reply Rob.
>
> The DLQ seems to be the queue to look for indeed, but it seems that  
> the
> expired messages are not send to this queue the moment they actually
> expire.
>
> I have created the following test scenario:
>
> - I create a receiver for queue://ActiveMQ.DLQ and start it up
> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
> between two receive's (Thread.sleep(1000) after 1 message reception)
> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms which
> will send 10 messages
> - I start the receiver for queue://MY.QUEUE.C
> - I start the producer for queue://MY.QUEUE.C
>
> After running this, I see this:
>
> ActiveMQ.DLQ 	
> 	Number Of Pending Messages : 0
> 	Number Of Consumers: 1
> 	Messages Sent: 0
> 	Messages Received: 0
> MY.QUEUE.C
> 	Number Of Pending Messages : 9
> 	Number Of Consumers: 1
> 	Messages Sent: 10
> 	Messages Received: 1
>
> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ  
> has
> received nothing.
>
> When I run my test an second time, I get the following stats:
>
> ActiveMQ.DLQ 	
> 	Number Of Pending Messages : 0
> 	Number Of Consumers: 1
> 	Messages Sent: 9
> 	Messages Received: 9
> MY.QUEUE.C
> 	Number Of Pending Messages : 9
> 	Number Of Consumers: 1
> 	Messages Sent: 20
> 	Messages Received: 2
>
> Which means the DLQ consumer has received the expired messages of my
> first run and the expired message of the second run are not sent to  
> the
> DLQ. (confirmed by my logging).
>
> Now, how can this be avoided? I want the expired messages to be sent
> immediately to the DLQ.
>
> Anybody any ideas?
>
> Thanks!
> Steven.
>
>
>
>
>
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: maandag 12 mei 2008 9:21
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
>
> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>
>> Hi,
>>
>>
>>
>> Does anybody knows whether and how it is possible to act on expired
>> messages?
>>
>>
>>
>> Thanks!
>>
>> Steven.
>>
>
> Expired messages have taken too long to deliver to a consumer - they
> are sent to a dead letter queue - see
> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
> or you can listen for advisories - see
> http://activemq.apache.org/advisory-message.html
>
>
>
>
> cheers,
>
> Rob
>
> http://open.iona.com/ -Enterprise Open Integration
> http://rajdavies.blogspot.com/
>
>
>






Re: Expired messages

Posted by Rob Davies <ra...@gmail.com>.
will look into it!

cheers,

Rob

http://open.iona.com/products/enterprise-activemq
http://rajdavies.blogspot.com/

On 15 May 2008, at 13:04, Steven Van Loon wrote:

> Thanks for the reply Rob.
>
> The DLQ seems to be the queue to look for indeed, but it seems that  
> the
> expired messages are not send to this queue the moment they actually
> expire.
>
> I have created the following test scenario:
>
> - I create a receiver for queue://ActiveMQ.DLQ and start it up
> - I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
> between two receive's (Thread.sleep(1000) after 1 message reception)
> - I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms which
> will send 10 messages
> - I start the receiver for queue://MY.QUEUE.C
> - I start the producer for queue://MY.QUEUE.C
>
> After running this, I see this:
>
> ActiveMQ.DLQ 	
> 	Number Of Pending Messages : 0
> 	Number Of Consumers: 1
> 	Messages Sent: 0
> 	Messages Received: 0
> MY.QUEUE.C
> 	Number Of Pending Messages : 9
> 	Number Of Consumers: 1
> 	Messages Sent: 10
> 	Messages Received: 1
>
> queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ  
> has
> received nothing.
>
> When I run my test an second time, I get the following stats:
>
> ActiveMQ.DLQ 	
> 	Number Of Pending Messages : 0
> 	Number Of Consumers: 1
> 	Messages Sent: 9
> 	Messages Received: 9
> MY.QUEUE.C
> 	Number Of Pending Messages : 9
> 	Number Of Consumers: 1
> 	Messages Sent: 20
> 	Messages Received: 2
>
> Which means the DLQ consumer has received the expired messages of my
> first run and the expired message of the second run are not sent to  
> the
> DLQ. (confirmed by my logging).
>
> Now, how can this be avoided? I want the expired messages to be sent
> immediately to the DLQ.
>
> Anybody any ideas?
>
> Thanks!
> Steven.
>
>
>
>
>
>
>
> -----Original Message-----
> From: Rob Davies [mailto:rajdavies@gmail.com]
> Sent: maandag 12 mei 2008 9:21
> To: users@activemq.apache.org
> Subject: Re: Expired messages
>
>
> On 9 May 2008, at 10:35, Steven Van Loon wrote:
>
>> Hi,
>>
>>
>>
>> Does anybody knows whether and how it is possible to act on expired
>> messages?
>>
>>
>>
>> Thanks!
>>
>> Steven.
>>
>
> Expired messages have taken too long to deliver to a consumer - they
> are sent to a dead letter queue - see
> http://activemq.apache.org/message-redelivery-and-dlq-handling.html
> or you can listen for advisories - see
> http://activemq.apache.org/advisory-message.html
>
>
>
>
> cheers,
>
> Rob
>
> http://open.iona.com/ -Enterprise Open Integration
> http://rajdavies.blogspot.com/
>
>
>






RE: Expired messages

Posted by Steven Van Loon <st...@invenso.com>.
Thanks for the reply Rob.

The DLQ seems to be the queue to look for indeed, but it seems that the
expired messages are not send to this queue the moment they actually
expire.

I have created the following test scenario:

- I create a receiver for queue://ActiveMQ.DLQ and start it up
- I create a receiver for queue://MY.QUEUE.C which leaves 1000 ms
between two receive's (Thread.sleep(1000) after 1 message reception)
- I create a producer for queue://MY.QUEUE.C with a TTL = 100 ms which
will send 10 messages
- I start the receiver for queue://MY.QUEUE.C
- I start the producer for queue://MY.QUEUE.C

After running this, I see this:

ActiveMQ.DLQ 	
	Number Of Pending Messages : 0 
	Number Of Consumers: 1
	Messages Sent: 0 
	Messages Received: 0 
MY.QUEUE.C
	Number Of Pending Messages : 9 
	Number Of Consumers: 1
	Messages Sent: 10 
	Messages Received: 1

queue://MY.QUEUE.C contains 9 expired messages after execution, DLQ has
received nothing.

When I run my test an second time, I get the following stats:

ActiveMQ.DLQ 	
	Number Of Pending Messages : 0 
	Number Of Consumers: 1
	Messages Sent: 9 
	Messages Received: 9 
MY.QUEUE.C
	Number Of Pending Messages : 9 
	Number Of Consumers: 1
	Messages Sent: 20 
	Messages Received: 2

Which means the DLQ consumer has received the expired messages of my
first run and the expired message of the second run are not sent to the
DLQ. (confirmed by my logging).

Now, how can this be avoided? I want the expired messages to be sent
immediately to the DLQ.

Anybody any ideas?

Thanks!
Steven.







-----Original Message-----
From: Rob Davies [mailto:rajdavies@gmail.com] 
Sent: maandag 12 mei 2008 9:21
To: users@activemq.apache.org
Subject: Re: Expired messages


On 9 May 2008, at 10:35, Steven Van Loon wrote:

> Hi,
>
>
>
> Does anybody knows whether and how it is possible to act on expired
> messages?
>
>
>
> Thanks!
>
> Steven.
>

Expired messages have taken too long to deliver to a consumer - they  
are sent to a dead letter queue - see
http://activemq.apache.org/message-redelivery-and-dlq-handling.html
or you can listen for advisories - see
http://activemq.apache.org/advisory-message.html




cheers,

Rob

http://open.iona.com/ -Enterprise Open Integration
http://rajdavies.blogspot.com/




Re: Expired messages

Posted by Rob Davies <ra...@gmail.com>.
On 9 May 2008, at 10:35, Steven Van Loon wrote:

> Hi,
>
>
>
> Does anybody knows whether and how it is possible to act on expired
> messages?
>
>
>
> Thanks!
>
> Steven.
>

Expired messages have taken too long to deliver to a consumer - they  
are sent to a dead letter queue - see http://activemq.apache.org/message-redelivery-and-dlq-handling.html
or you can listen for advisories - see http://activemq.apache.org/advisory-message.html




cheers,

Rob

http://open.iona.com/ -Enterprise Open Integration
http://rajdavies.blogspot.com/