activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rob Davies (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (AMQ-2167) ActiveMQ producer/consumer hangs when one of the consumer didn't respond
Date Fri, 17 Jul 2009 11:05:34 GMT

     [ https://issues.apache.org/activemq/browse/AMQ-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Rob Davies resolved AMQ-2167.
-----------------------------

       Resolution: Fixed
    Fix Version/s: 5.3.0
         Assignee: Rob Davies

Turn producer Flow control off (default in 5.3).
Also change prefetch to 0 on the consumer

> ActiveMQ producer/consumer hangs when one of the consumer didn't respond
> ------------------------------------------------------------------------
>
>                 Key: AMQ-2167
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2167
>             Project: ActiveMQ
>          Issue Type: Bug
>            Reporter: Ashok
>            Assignee: Rob Davies
>            Priority: Blocker
>             Fix For: 5.3.0
>
>         Attachments: Thread Dump for ActiveMQ_2.tdump
>
>
> We are using ActiveMQ 5.2 & Spring 2.5.4...
> We are using ActiveMQ Embeeded broker 
> <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
>     <property name="connectionFactory">
>       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>         <property name="brokerURL">
>           <value>vm://localhost?broker.persistent=false</value> 
>         </property>
>       </bean>
>     </property>
>   </bean>
>   
>    <bean id="destination" class=" org.apache.activemq.command.ActiveMQQueue">
>        <constructor-arg ref="jmsQueueJndiName"></constructor-arg>
>     </bean>
>   
>    
>    <bean id="calendarEventContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer"
>
>     <property name="connectionFactory" ref="jmsFactory" />
>     <property name="destination" ref="destination" />
>     <property name="messageListener" ref="calendarEventProcessor" />
>     <property name="messageSelector">
>       <util:constant static-field="com.jpmc.spex.utils.lookup.EventCategoryConstants.EVENT_CATEGORY_CALENDAR"/>
>     </property>
>   </bean>
>   
>    <bean id="runtimeEventContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer"
>
>     <property name="connectionFactory" ref="jmsFactory" />
>     <property name="destination" ref="destination" />
>     <property name="messageListener" ref="runtimeEventProcessor" />
>     <property name="messageSelector">
>       <util:constant static-field="com.jpmc.spex.utils.lookup.EventCategoryConstants.EVENT_CATEGORY_RUNTIME"/>
>     </property>
>   </bean>
>   
>    <bean id="systemEventContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer"
>
>     <property name="connectionFactory" ref="jmsFactory" />
>     <property name="destination" ref="destination" />
>     <property name="messageListener" ref="systemEventProcessor" />
>     <property name="concurrentConsumers" value="5" />
>     <property name="messageSelector">
>       <util:constant static-field="com.jpmc.spex.utils.lookup.EventCategoryConstants.EVENT_CATEGORY_SYSTEM"/>
>     </property>
>   </bean>
>   
>   <bean id="genericCalendarEventContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer"
>
>     <property name="connectionFactory" ref="jmsFactory" />
>     <property name="destination" ref="destination" />
>     <property name="messageListener" ref="genericCalendarEventProcessor" />
>     <property name="messageSelector">
>       <util:constant static-field="com.jpmc.spex.utils.lookup.EventCategoryConstants.EVENT_CATEGORY_GENERIC"/>
>     </property>
>   </bean>
>    
> We are sending the email from all these listeners after doing some logic.when something
happens in the SMTP side and if there is no response from SMTP side and if the Listener is
waiting then the entire producer/consumer is halted.
> My Question is why One Consumer  blocking all other consumer /producer. (see the stack
trace which shows one of the Consumer is waiting for some response from SMTP server).
> ActiveMQ Session Task" - Thread t@2554
>    java.lang.Thread.State: RUNNABLE
> 	at java.net.SocketInputStream.socketRead0(Native Method)
> 	at java.net.SocketInputStream.read(SocketInputStream.java:129)
> 	at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:97)
> 	at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
> 	at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
> 	- locked java.io.BufferedInputStream@13a80ea
> 	at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:75)
> 	at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1440)
> 	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260)
> 	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
> 	at javax.mail.Service.connect(Service.java:275)
> 	at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:389)
> 	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:342)
> 	at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:338)
> 	at com.jpmc.ibtech.spring.email.MimeEmailService.sendEmail(MimeEmailService.java:61)
> 	at com.jpmc.spex.background.events.processor.AbstractEventAction.sendEmail(AbstractEventAction.java:63)
> 	at com.jpmc.spex.background.events.processor.AbstractEventAction.execute(AbstractEventAction.java:79)
> 	at com.jpmc.spex.background.events.processor.system.SystemEventAction.execute(SystemEventAction.java:47)
> 	at com.jpmc.ibtech.spring.jms.EventProcessor.onMessage(EventProcessor.java:101)
> 	at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:531)
> 	at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:466)
> 	at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:435)
> 	at org.springframework.jms.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:407)
> 	at org.springframework.jms.listener.SimpleMessageListenerContainer.processMessage(SimpleMessageListenerContainer.java:290)
> 	at org.springframework.jms.listener.SimpleMessageListenerContainer$2.onMessage(SimpleMessageListenerContainer.java:266)
> 	at org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:967)
> 	- locked java.lang.Object@1e58347
> 	at org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:122)
> 	at org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:192)
> 	at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
> 	at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
>    Locked ownable synchronizers:
> 	- locked java.util.concurrent.locks.ReentrantLock$NonfairSync@10dbec7
> See the attached ThreadDump which shows Producer is waiting..
> I saw that..I can enable ProduceFlowControl...I am just worried whether it will start
spilling to the disk and create more problems.

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


Mime
View raw message