You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Jeff Goot (JIRA)" <ji...@apache.org> on 2008/12/02 08:48:05 UTC

[jira] Commented: (AMQ-1927) activemq producer hangs (using spring)

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

Jeff Goot commented on AMQ-1927:
--------------------------------

I've been trying to get the AMQ 5.1.0 Broker to work with our Spring-based application. I'm seeing the same behavior as Juliano was seeing but it didn't work for me when I set processFlowControl to "false". (See my activemq.xml file below.) The AMQ Broker actually stopped receiving and distributing messages (but /admin was responsive though.) After restarting the AMQ Broker the producers and consumers started working again. Take note that the producers and consumers were NOT restarted.

I also tried the following to no avail:
- set jms.prefetchPolicy.queuePrefetch=1
- with out failover protocol
- AMQ 5.0.0 client with AMQ 5.1.0 broker
- no parameters in the URL

Configuration:
- Centos (kernel 2.6.18-92)
- Java 1.6.0_05
- ActiveMQ 5.1.0 (java -Xmx256m -Xss128k -Xms128m -Dorg.apache.activemq.UseDedicatedTaskRunner=true) 
- Spring 2.5.5
- Camel 1.3.0
- JMeter (load produces messages to 3 queue with throughput of 10/sec, 1/sec, and 1/sec.)

AMQ URL used by producer: failover:(tcp://host1.internal:12345)?jms.prefetchPolicy.queuePrefetch=1&jms.redeliveryPolicy.allPrefetchValues=1&jms.redeliveryPolicy.initialRedeliveryDelay=2000&jms.redeliveryPoli
cy.maximumRedeliveries=24&jms.redeliveryPolicy.useCollisionAvoidance=true

In activemq.xml:

<broker>
                <!-- Destination specific policies using destination names or wildcards -->
                <destinationPolicy>
                        <policyMap>
                                <policyEntries>

                                        <policyEntry topic=">" producerFlowControl="false" memoryLimit="1mb">
                                                <dispatchPolicy>
                                                        <strictOrderDispatchPolicy />
                                                </dispatchPolicy>
                                                <subscriptionRecoveryPolicy>
                                                        <lastImageSubscriptionRecoveryPolicy />
                                                </subscriptionRecoveryPolicy>
                                        </policyEntry>

                                        <policyEntry queue=">">
                                                <dispatchPolicy>
                                                        <strictOrderDispatchPolicy />
                                                </dispatchPolicy>
                                                <subscriptionRecoveryPolicy>
                                                        <lastImageSubscriptionRecoveryPolicy />
                                                </subscriptionRecoveryPolicy>                                   
                                                <deadLetterStrategy>
                                                        <individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
                                                </deadLetterStrategy>
                                        </policyEntry>
                                        
                                </policyEntries>
                        </policyMap>
                </destinationPolicy>

                <!-- The transport connectors ActiveMQ will listen to -->
                <transportConnectors>
                        <transportConnector name="openwire" uri="tcp://host1.internal:12345" />
                </transportConnectors>

                <!--  Use the following to set the broker memory limit -->
                <systemUsage>
                        <systemUsage>
                                <memoryUsage>
                                        <memoryUsage limit="64 mb" percentUsageMinDelta="20" />
                                </memoryUsage>
                                <tempUsage>
                                        <tempUsage limit="100 mb" />
                                </tempUsage>
                                <storeUsage>
                                        <storeUsage limit="1 g" name="host1.internal" />
                                </storeUsage>
                        </systemUsage>
                </systemUsage>

                <!-- Use the following to configure how ActiveMQ is exposed in JMX -->
                <managementContext>
                        <managementContext connectorPort="56789" jmxDomainName="org.apache.activemq" />
                </managementContext>
</broker>
...

Do you guys see any issue with my configuration? 

I'd appreciate any information.

Thanks,
Jeff

> activemq producer hangs (using spring)
> --------------------------------------
>
>                 Key: AMQ-1927
>                 URL: https://issues.apache.org/activemq/browse/AMQ-1927
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.1.0
>         Environment: suse linux 10.3
> sun jdk "1.6.0_06"
> tomcat 6.0.16
> spring framework 2.0
>            Reporter: Randy
>             Fix For: 5.3.0
>
>
> We have an internal activemq queue configured using the spring framework (configuration below). During a high volume message test, the message producer hangs. See stack trace below.
> May be related to bugs #AMQ-1641 or #AMQ-1490.
> "pool-2-thread-2" prio=10 tid=0x00002aaaf2c20000 nid=0x297e waiting on condition [0x000000004173f000..0x000000004173fc20]
>    java.lang.Thread.State: WAITING (parking)
> 	at sun.misc.Unsafe.park(Native Method)
> 	- parking to wait for  <0x00002aaae859af40> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> 	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
> 	at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:317)
> 	at org.apache.activemq.transport.FutureResponse.getResult(FutureResponse.java:40)
> 	at org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:80)
> 	at org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1195)
> 	at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1644)
> 	- locked <0x00002aaab3e433d8> (a java.lang.Object)
> 	at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:227)
> 	at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:74)
> 	- locked <0x00002aaab3e42d08> (a org.apache.activemq.ActiveMQMessageProducer)
> 	at org.apache.activemq.pool.PooledProducer.send(PooledProducer.java:59)
> 	at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:534)
> 	at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:511)
> 	at org.springframework.jms.core.JmsTemplate$2.doInJms(JmsTemplate.java:477)
> 	at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:428)
> 	at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:475)
> <amq:broker id="broker" useJmx="true" persistent="false"  brokerName="fb" >
> 	
>   		<amq:managementContext>
>         	<amq:managementContext connectorPort="2011" jmxDomainName="org.apache.activemq"/>
>         </amq:managementContext>
> 		<amq:transportConnectors>
> 			<amq:transportConnector uri="tcp://localhost:0" />
> 			<amq:transportConnector uri="tcp://localhost:61616" />
> 		</amq:transportConnectors>
> 	</amq:broker>
> 	<!--  ActiveMQ destinations to use  -->
> 	<amq:queue id="inboundEvents" physicalName="fb.inbound.events">
> 	</amq:queue>
>  
> 	<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
> 		<property name="connectionFactory">
> 			<bean class="org.apache.activemq.ActiveMQConnectionFactory">
> 				<property name="brokerURL" value="vm://localhost"/>
> 			</bean>
> 		</property>
> 	</bean>
> 	<bean id="simpleJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
> 		<property name="connectionFactory" ref="jmsFactory"/>
> 	</bean>
> 	<!-- consumers -->
> 	<bean id="inboundEventConsumer" class="jms.WrapperConsumer" init-method="start" destroy-method="stop">
> 		<property name="myId" value="fb.consumer.events"/>
> 		<property name="template" ref="simpleJmsTemplate"/>
> 		<property name="destination" ref="inboundEvents"/>
> 	</bean>
> 	<!-- producers -->
> 	<bean id="inboundEventProducer" class="jms.WrapperProducer">
> 		<property name="template" ref="simpleJmsTemplate"/>
> 		<property name="destination" ref="inboundEvents"/>
> 	</bean>

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