Hi,

I've tried your code. It worked. But then I substituted synch .receive()
with asynch MessageListener, which I register after the same timeout. And
surprise! The message arrives. But it still shouldn't, right?

Let me post here my code:


                ConnectionFactory connectionFactory = (ConnectionFactory) 
ctx.lookup(
"ConnectionFactory" );
                Connection connection = connectionFactory.createConnection( );
                connection.start( );

                long timeToLive = 1000;

                Session session = connection.createSession( false,
Session.AUTO_ACKNOWLEDGE );
                MessageProducer producer = session.createProducer( null );
                producer.setTimeToLive( timeToLive );
                Queue myQueue = session.createQueue( "TEST_QUEUE" );

                Message m = session.createTextMessage( "message" );
                producer.send( myQueue, m );
                // sleeps a second longer than the expiration time.
                // Basically waits till queue expires.
                Thread.sleep( timeToLive + 1000 );

                // myQueue should return null since it already expired
                MessageConsumer consumer = session.createConsumer( myQueue );
                // Message msg = consumer.receive( 1000 );
                // System.out.println( msg );

                MessageListener messageListener = new MessageListener( ) {

                        public void onMessage(Message m) {
                                if ( m instanceof TextMessage ) {
                                        TextMessage textMessage = (TextMessage) 
m;
                                        try {
                                                System.out.println( "got 
messge: " + textMessage.getText( ) );
                                        } catch ( JMSException e ) {

                                                e.printStackTrace( );
                                        }
                                }

                        }

                };

                consumer.setMessageListener( messageListener );

Regards,
Sergey Z



jlim wrote:
> 
> 
> Hi,
> 
> That's odd. I ran the same test case on 4.0.2 and I can't seem to 
> reproduced the problem.  Would you mind posting a snippet of your code 
> so we could take a look at it?  Btw, please make sure that the 
> setTimeToLive method  is called before sending the message.  You could 
> also try running the sample code below and see if it works for you
> 
>              .....
>         connection.start(); 
>         long timeToLive = 1000;
>         MessageProducer producer = session.createProducer(null);
>         p.setTimeToLive(timeToLive );
>         Queue myQueue = session.createQueue("QUEUE");
> 
>         Message m = session.createTextMessage("message");
>         producer.send(myQueue, m);
>         // sleeps a second longer than the expiration time.
>        // Basically waits till queue expires.
>        Thread.sleep(timeToLive + 1000);
>        
>         //myQueue should return null since it already expired
>         MessageConsumer consumer = session.createConsumer(myQueue); 
>         Message msg = consumer.receive(1000);
>           ......
> 
> 
> Regards,
> Jonas
> 
> 
> 
> 
> Sergey wrote:
>> Hallo,
>>
>> I've got the same problem. Expiration dosn't seem to work. I'm using
>> 4.0.2.
>>
>>
>>
>> jlim wrote:
>>   
>>> Hi,
>>>
>>> Hmm - which version of ActiveMQ are you using?  The message should have
>>> expired and should not be consumed after the timetolive has elapsed. 
>>>
>>> You  can try looking on some of the test cases and see if you can
>>> reproduce the issue: 
>>>
>>> ie.
>>> https://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsSendReceiveWithMessageExpirationTest.java
>>>
>>> btw, I tested this using trunk and appears to work ok :)
>>>
>>>
>>> Regards,
>>> Jonas
>>>
>>>
>>> Christopher_Ong wrote:
>>>     
>>>> I set the timetolive for a message as 1s and y after that period, the
>>>> msg
>>>> still remain there? Shouldn't be it wil automatically been deleted or
>>>> send
>>>> to dead msg queue?
>>>>   
>>>>       
>>>     
>>
>>   
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Message-Expiry-tf2407730.html#a7571901
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.

Reply via email to