Hi Chris, I could share my test classes. Where do I upload the files to?
Thanks, Gary On Wed, Aug 8, 2012 at 6:18 PM, Christian Müller < christian.muel...@gmail.com> wrote: > This is really a huge difference. > I will have a look at it in the next days. I will run the tests against > ActiveMQ because I'm not familiar with Solace JMS. I hope I can reproduce > the numbers... > Could you also share your test classes with us? Or an entire test project? > > Best, > Christian > > On Wed, Aug 8, 2012 at 5:31 PM, northface01 <northfac...@gmail.com> wrote: > > > I did a simple throughput test where I have about 3k large messages each > > has > > a size of 1KB+ in a Solace JMS queue. I set up a simple camel route which > > just consume the 3k messages and send them to a bean which simply logs > the > > message body. With this approach I was able to consume and log all > messages > > in 28-30 seconds, which translates to about 100 messages per second. > > However, when I used a Spring DMLC to consume with the same bean as the > > message listener which also simply logs the message body, I got all > > messages > > consumed and logged in about 1 second, which is about 3k messages per > > second. I understand camel-jms component is not designed with performance > > as > > the top priority but this huge performance between camel-jms and spring > > DMLC > > doesn't make any sense. I haven't got time to trace down the root cause > of > > this huge overhead by camel-jms myself. I would appreciate if someone who > > is > > more familiar with camel-jms code can take a quick look at this issue. > BTW, > > I was able to use the new camel-sjms component to consume the same 3k > > messages in about 1.5 seconds which meets my throughput target so I > didn't > > have to fix camel-jms myself or write my own jms component. So kudos to > the > > developers of camel-sjms. > > > > Here is my camel context: > > > > <beans xmlns="http://www.springframework.org/schema/beans" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xmlns:camel="http://camel.apache.org/schema/spring" > > xmlns:context="http://www.springframework.org/schema/context" > > xmlns:tx="http://www.springframework.org/schema/tx" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd > > http://camel.apache.org/schema/spring > > http://camel.apache.org/schema/spring/camel-spring-2.9.2.xsd > > http://www.springframework.org/schema/context > > http://www.springframework.org/schema/context/spring-context-3.0.xsd > > http://www.springframework.org/schema/tx > > http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> > > > > <context:load-time-weaver/> > > > > <bean id="placeholderProperties" > > > > > class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> > > <property name="location" > > value="classpath:${camel.properties}"/> > > <property name="systemPropertiesModeName" > > value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> > > <property name="ignoreUnresolvablePlaceholders" > > value="true"/> > > <property name="order" value="1"/> > > </bean> > > > > <camel:errorHandler id="noErrorHandler" type="NoErrorHandler"/> > > > > <bean id="shutdown" > > class="org.apache.camel.impl.DefaultShutdownStrategy"> > > <property name="timeout" value="0"/> > > </bean> > > > > <bean id="msgTest" class="Test"/> > > > > <camel:camelContext id="steam-camel" > > xmlns="http://camel.apache.org/schema/spring"> > > <jmxAgent id="agent" disabled="true"/> > > <endpoint id="steam-solace" > > uri="jms:${queue.name > > }?jmsMessageType=Text&cacheLevelName=CACHE_CONSUMER"/> > > <route errorHandlerRef="noErrorHandler" > > shutdownRunningTask="CompleteAllTasks"> > > <from uri="ref:steam-solace"/> > > <to uri="bean:msgTest?method=onText"/> > > </route> > > </camel:camelContext> > > > > <bean id="jndiTemplate" > > class="org.springframework.jndi.JndiTemplate"> > > <property name="environment"> > > <props> > > <prop > > key="java.naming.provider.url">${jms.provider.url}</prop> > > <prop > > key="java.naming.factory.initial">${jms.factory.initial}</prop> > > <prop > > key="java.naming.security.principal">${jms.security.principal}</prop> > > <prop > > key="java.naming.security.credentials">${jms.security.credentials}</prop> > > <prop key="Solace_JMS_JNDI_ClientID">${ > > jms.client.id}-JNDI</prop> > > <prop > > key="Solace_JMS_VPN">${jms.solace.vpn}</prop> > > </props> > > </property> > > </bean> > > > > <bean id="jmsConnectionFactory" > > class="org.springframework.jndi.JndiObjectFactoryBean"> > > <property name="jndiTemplate" ref ="jndiTemplate"/> > > <property name="jndiName" > > value="${jms.connection.factory}"/> > > </bean> > > > > <bean id="connectionFactory" > > class="org.springframework.jms.connection.CachingConnectionFactory"> > > <property name="targetConnectionFactory" ref > > ="jmsConnectionFactory"/> > > <property name="sessionCacheSize" value="10"/> > > <property name="clientId" value="${jms.client.id}"/> > > </bean> > > > > <bean id="jmsConfig" > > class="org.apache.camel.component.jms.JmsConfiguration"> > > <property name="connectionFactory" > > ref="connectionFactory"/> > > <property name="asyncConsumer" value="true"/> > > <property name="disableReplyTo" value="true"/> > > <property name="acknowledgementModeName" > > value="DUPS_OK_ACKNOWLEDGE"/> > > <property name="concurrentConsumers" value="1"/> > > <property name="maxConcurrentConsumers" value="1"/> > > <property name="idleTaskExecutionLimit" value="1"/> > > <property name="idleConsumerLimit" value="1"/> > > </bean> > > > > <bean id="jms" > class="org.apache.camel.component.jms.JmsComponent"> > > <property name="configuration" ref="jmsConfig"/> > > </bean> > > > > </beans> > > > > Here is my Spring DMLC context: > > <beans xmlns="http://www.springframework.org/schema/beans" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > xmlns:camel="http://camel.apache.org/schema/spring" > > xmlns:context="http://www.springframework.org/schema/context" > > xmlns:tx="http://www.springframework.org/schema/tx" > > xsi:schemaLocation="http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-3.0.xsd > > http://camel.apache.org/schema/spring > > http://camel.apache.org/schema/spring/camel-spring-2.9.2.xsd > > http://www.springframework.org/schema/context > > http://www.springframework.org/schema/context/spring-context-3.0.xsd > > http://www.springframework.org/schema/tx > > http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> > > > > <context:load-time-weaver/> > > > > <bean id="placeholderProperties" > > > > > class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> > > <property name="location" > > value="classpath:${camel.properties}"/> > > <property name="systemPropertiesModeName" > > value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> > > <property name="ignoreUnresolvablePlaceholders" > > value="true"/> > > <property name="order" value="1"/> > > </bean> > > > > <bean id="msgListener" class="Test"/> > > > > <bean id="DMLC" > > class="org.springframework.jms.listener.DefaultMessageListenerContainer"> > > <property name="cacheLevelName" value="CACHE_CONSUMER" /> > > <property name="sessionTransacted" value="false" /> > > <property name="destinationName" value="${jms.queue.name}" /> > > <property name="connectionFactory" ref="connectionFactory" /> > > <property name="pubSubDomain" value="false" /> > > <property name="messageListener" ref="msgListener" /> > > </bean> > > > > > > <bean id="jndiTemplate" > > class="org.springframework.jndi.JndiTemplate"> > > <property name="environment"> > > <props> > > <prop > > key="java.naming.provider.url">${jms.provider.url}</prop> > > <prop > > key="java.naming.factory.initial">${jms.factory.initial}</prop> > > <prop > > key="java.naming.security.principal">${jms.security.principal}</prop> > > <prop > > key="java.naming.security.credentials">${jms.security.credentials}</prop> > > <prop key="Solace_JMS_JNDI_ClientID">${ > > jms.client.id}-JNDI</prop> > > <prop > > key="Solace_JMS_VPN">${jms.solace.vpn}</prop> > > </props> > > </property> > > </bean> > > > > <bean id="jmsConnectionFactory" > > class="org.springframework.jndi.JndiObjectFactoryBean"> > > <property name="jndiTemplate" ref ="jndiTemplate"/> > > <property name="jndiName" > > value="${jms.connection.factory}"/> > > </bean> > > > > <bean id="connectionFactory" > > class="org.springframework.jms.connection.CachingConnectionFactory"> > > <property name="targetConnectionFactory" ref > > ="jmsConnectionFactory"/> > > <property name="sessionCacheSize" value="10"/> > > <property name="clientId" value="${jms.client.id}"/> > > </bean> > > > > </beans> > > > > Here is my Test bean which logs the messages: > > public class Test implements MessageListener { > > private Logger logger = Logger.getLogger(Test.class); > > > > @Override > > public void onMessage(Message message) { > > try { > > logger.debug(((TextMessage)message).getText()); > > } catch (Exception e) { > > logger.error(message, e); > > } > > } > > > > public void onText(String text) { > > logger.debug(text); > > } > > > > } > > > > > > > > -- > > View this message in context: > > > http://camel.465427.n5.nabble.com/Camel-JMS-Performance-is-ridiculously-worse-than-pure-Spring-DMLC-tp5716998.html > > Sent from the Camel Development mailing list archive at Nabble.com. > > > > > > -- >