[ 
https://issues.apache.org/activemq/browse/AMQ-1850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44973#action_44973
 ] 

Rob Davies commented on AMQ-1850:
---------------------------------

PJ Fanning - I'd suggest you reduce the prefetch limit for your consumers -  
see http://activemq.apache.org/what-is-the-prefetch-limit-for.html

> Failing to close a connection leaves consumers behind that prevent new 
> consumers receiving messages
> ---------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-1850
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1850
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 4.1.0, 4.1.1, 4.1.2, 5.0.0, 5.1.0
>            Reporter: Denis Abramov
>            Assignee: Rob Davies
>            Priority: Blocker
>         Attachments: TestAmq.java
>
>
> I have been having this problem throughout all of the ActiveMQ versions 
> (starting from 4.1.0-incubator). Just got used to killing off the dead 
> clients throught jconsole every morning. Would be nice to have this fixed... 
> Glad someone put a test case for it [thanks Ossory]
> Hi, 
> I have an issue where a JMS client attempts to receive messages from a queue. 
> The client fails due to a JVM crash and the JMS connection is not closed. 
> This leaves a consumer behind (that I can see in the ActiveMQ admin console). 
> If I restart the JMS client it fails to receive all of the new messages that 
> sent to the queue in question. 
> Using JMX to stop the open connections or closing ActiveMQ allows the client 
> to work again. 
> Is there a timeout value that you can apply to connections to avoid having to 
> do this? 
> Any help would be appreciated. 
> I've created an artificial test case based on the behaviour I have seen in 
> ActiveMQ 5.1 on Windows XP. 
> The method jmsTest2 deliberately fails to close the connection. 
>     static final String PROVIDER_URL = "tcp://localhost:61616"; 
>     static final String QUEUE = "queueA"; 
>     static void jmsTest() throws JMSException, NamingException { 
>         Properties props = new Properties(); 
>         props.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
> "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
>         props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);         
>         InitialContext ctx = new InitialContext(props); 
>         QueueConnectionFactory cf = 
> (QueueConnectionFactory)ctx.lookup("ConnectionFactory"); 
>         QueueConnection conn = cf.createQueueConnection(); 
>         conn.start(); //this is required if you want to receive messages 
> using this connection 
>         QueueSession sess = conn.createQueueSession(false, 
> Session.AUTO_ACKNOWLEDGE); 
>         Queue qa = sess.createQueue(QUEUE); 
>         QueueSender sender = sess.createSender(qa); 
>         for(int i = 0; i < 10; i++) { 
>             Message msg = sess.createTextMessage("test"); 
>             sender.send(msg); 
>         } 
>         sender.close(); 
>         sess.close(); 
>         conn.close(); 
>     } 
>     static void jmsTest2() throws JMSException, NamingException { 
>         Properties props = new Properties(); 
>         props.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
> "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); 
>         props.setProperty(Context.PROVIDER_URL, PROVIDER_URL);         
>         InitialContext ctx = new InitialContext(props); 
>         QueueConnectionFactory cf = 
> (QueueConnectionFactory)ctx.lookup("ConnectionFactory"); 
>         QueueConnection conn = cf.createQueueConnection(); 
>         conn.start(); //this is required if you want to receive messages 
> using this connection 
>         QueueSession sess = conn.createQueueSession(false, 
> Session.AUTO_ACKNOWLEDGE); 
>         Queue qa = sess.createQueue(QUEUE); 
>         QueueReceiver qr = sess.createReceiver(qa); 
>         for(int i = 0; i < 10; i++) { 
>             Message msgin = qr.receive(5000); 
>             System.out.println("msgin" + i + " = " + msgin); 
>         } 
>         //qr.close(); 
>         //sess.close(); 
>         //conn.stop(); 
>         //conn.close(); 
>     } 
>    public static void main(String[] args) 
>    { 
>         jmsTest(); 
>         jmsTest2(); 
>         jmsTest(); 
>         jmsTest2(); 
>     } 
> The first call to jmsTest2 prints 10 messages but the second call fails to 
> read any messages. The JVM will not stop after the main method completes 
> because some ActiveMQ threads remain open.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to