activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul French <paul.fre...@frenchiesystems.com>
Subject Re: Session.DUPS_OK_ACKNOWLEDGE
Date Tue, 16 Jan 2007 10:32:26 GMT

I'll implement your current comments and see what happens. I'm still not sure
where to set Session.DUPS_OK_ACKNOWLEDGE since I am using the Spring
JmsTemplate and the template creates the sessions for you on the fly. I will
have a dig about in the javadoc. Any other ideas how to make the whole
process faster?

On the client side I am using a pool of consumers (via the Spring
SimpleMessageListenerContainer)

  <bean id="listenerContainer"
class="org.springframework.jms.listener.SimpleMessageListenerContainer">
    <property name="concurrentConsumers" value="4"/>
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="temporaryQueue" />
    <property name="messageListener" ref="client" />
  </bean>


My connection factory on the client side is

  <bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL">
         
<value>tcp://192.168.160.86:61616?jms.prefetchPolicy.queuePrefetch=100</value>
        </property>
        <property name="useAsyncSend"><value>TRUE</value></property>
        <property name="optimizeAcknowledge"><value>TRUE</value></property>
      </bean>
    </property>
  </bean>

What I am doing is........

client produces message -> Broker (main queue) -> server consumes message
from main queue

server sends reply (produces message) -> broker(temp queue) -> client
consumes message from temp queue


Just FYI on the server side a number of threads are started where each
thread reads from the main queue and then simply puts  a response on the
temp queue. I don't use a SimpleMessageListenerContainer on the server side
just a number of pre-configured threads (8 threads) that use the same spring
single connection factory and JmsTemplates.........

  <bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
    <property name="targetConnectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL">
         
<value>tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=100</value>
        </property>
        <property name="useAsyncSend"><value>TRUE</value></property>
        <property name="optimizeAcknowledge"><value>TRUE</value></property>
      </bean>
    </property>
  </bean>

  <bean id="requestServer" singleton="false"
class="com.frenchiesystems.ttre.server.implemented.RequestServer">
    <property name="noOfThreads"><value>8</value></property>
    <property name="replyJmsTemplate"><ref
local="replyJmsTemplate"/></property>
    <property name="receiveJmsTemplate"><ref
local="receiveJmsTemplate"/></property>
  </bean>

  <bean id="receiveJmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory"><ref
local="connectionFactory"/></property>
    <property name="defaultDestination">
      <bean class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg
index="0"><value>MAIN_QUEUE</value></constructor-arg> 
      </bean>
    </property>
  </bean>

  <bean id="replyJmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory"><ref
local="connectionFactory"/></property>
  </bean>



James.Strachan wrote:
> 
> On 1/15/07, Paul French <paul.french@frenchiesystems.com> wrote:
>>
>> ActivemQ 4.1.0
>>
>>
>> Where do I set Session.DUPS_OK_ACKNOWLEDGE this?
> 
> http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Connection.html#createSession(boolean,%20int)
> 
> 
>> I'm trying to increase
>> performance of the messaging layer and I'm going through the performance
>> guide at
>> http://devzone.logicblaze.com/site/apache-activemq-performance-tuning-guide.html
>> http://devzone.logicblaze.com/site/apache-activemq-performance-tuning-guide.html
>>
>> I can send out a 1000 messages a second no problem but the rest of the
>> messaging layer is very slow so I need some help here.
>>
>> My scenario is client creates many messages and sends async to the broker
>> (one connection, one session). The client also creates a temporary queue
>> to
>> receive replies on. The client also starts a number of consumers to
>> listen
>> on the temp queue.
>>
>> A consumer consumes the messages and then replies by placing a message on
>> the temporary queue.
>>
>> My client receives the reply via the temp queue.
>>
>>
>> I have no need for Quality Of Service or persistence. So far for the
>> cleint
>> I have set the following properties to improve performance:
>>
>>   <bean id="connectionFactory"
>> class="org.springframework.jms.connection.SingleConnectionFactory">
>>     <property name="targetConnectionFactory">
>>       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>>         <property name="brokerURL">
>>
>> <value>tcp://192.168.160.86:61616?jms.prefetchPolicy.queuePrefetch=100</value>
>>         </property>
>>         <property name="useAsyncSend"><value>TRUE</value></property>
>>         <property
>> name="optimizeAcknowledge"><value>TRUE</value></property>
>>       </bean>
>>     </property>
>>   </bean>
>>
>> Is optimizeAcknowledge related to Session.DUPS_OK_ACKNOWLEDGE?
> 
> I wouldn't worry about optimizeAcknowledge
> 
> You should make sure your producer is using non-persistent mode.
> 
> 
>> For the server side I have used the same properties for now:
>>
>>   <bean id="connectionFactory"
>> class="org.springframework.jms.connection.SingleConnectionFactory">
>>     <property name="targetConnectionFactory">
>>       <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>>         <property name="brokerURL">
>>
>> <value>tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=100</value>
>>         </property>
>>         <property name="useAsyncSend"><value>TRUE</value></property>
>>         <property
>> name="optimizeAcknowledge"><value>TRUE</value></property>
>>       </bean>
>>     </property>
>>   </bean>
>>
>>
>> The server and broker run on the same machine for this test but will not
>> in
>> production hence I have not bothered trying to embed the broker in the
>> server.
>>
>> Baiscally for this test my client is punching out about 1000 messages and
>> I
>> want to see how long it takes to get replies. At the moment I am pumping
>> out
>> about 1000 messages in about 2 seconds but it takes 20 seconds to get the
>> 1000 replies. I am obviously missing something here?? Any pointers would
>> be
>> great.
> 
> Are you using a pool of consumers to process the requests? Otherwise
> you are single-threading things which is kinda slow. Also I'd leave
> high prefetch values (say 5000 at least) on consumers on both sides.
> 
> -- 
> 
> James
> -------
> http://radio.weblogs.com/0112098/
> 
> 

-- 
View this message in context: http://www.nabble.com/Session.DUPS_OK_ACKNOWLEDGE-tf3016262.html#a8387795
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message