Use what works best for you. Attache it here, use GitHub or Gist, Pastie,
...

Best,
Christian

On Thu, Aug 9, 2012 at 4:44 AM, Gary Liu <northfac...@gmail.com> wrote:

> 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&amp;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.
> > >
> >
> >
> >
> > --
> >
>



--

Reply via email to