Ok, thanks a lot! Will keep an eye on it. Steven.
-----Original Message----- From: Rob Davies [mailto:[EMAIL PROTECTED] 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:[EMAIL PROTECTED] > 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:[EMAIL PROTECTED] >> 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:[EMAIL PROTECTED] >>> 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/ >>> >>> >>> >> >> >> >> >> > > > > > > >