2012-09-03 220 views
2

我在Spring中有以下配置,它工作正常但性能太低(20條消息需要1分鐘)。你能否建議我改變以提高性能。Spring-JMS(Websphere MQ)

<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> 
     <property name="transportType"><value>1</value></property> 
     <property name="queueManager"><value></value></property> 
     <property name="hostName"><value></value></property> 
     <property name="port"><value></value></property> 
     <property name="channel"><value></value></property> 
     <property name="clientId"><value></value></property>   
    </bean> 
     <bean id="SenderJMSTemplate" class="org.springframework.jms.core.JmsTemplate"> 
     <property name="connectionFactory"><ref bean="jmsConnectionFactory" /> </property> 
     <property name="pubSubDomain"><value>false</value></property> 
     <property name="defaultDestination"><ref bean="senderQueue" /></property> 
    </bean> 
<bean id="senderQueue" class="com.ibm.mq.jms.MQQueue"> 
     <constructor-arg value="TEST" /> 
     <property name="baseQueueManagerName"><value>tree.queue.manager</value></property> 
     <property name="baseQueueName"><value>ORANGE.QUEUE</value></property> 
    </bean> 
    <bean id="jmsSender" class="org.tree.jms.spring.JMSSender"> 
     <property name="jmsTemplate"><ref bean="SenderJMSTemplate"/></property>  
    </bean> 

我從春天呼籲爲

JMSSender obj = (JMSSender) context.getBean("jmsSender"); 

和我的發件人程序是:

 @Cacheable("message") 

    public void sendMesage() { 

     jmsTemplate.send(new MessageCreator() { 
     public Message createMessage(Session session)throws JMSException { 
     message = (Message) session.createTextMessage(stringBuffer.toString()); 
     return message; 
     } 
     }); 

    } 
} 

回答

6

使用JmsTemplate的消息發送出去的JavaEE容器時,一個常見的問題是它的極端因爲它爲每條消息獲取一個新的連接(然後關閉它),所以速度很慢。您可能需要一個池/緩存連接來提高速度。

閱讀這篇文章,它是ActiveMQ的寫的,但適用於類似的方式到WebSphere MQ:http://activemq.apache.org/jmstemplate-gotchas.html

您可以設置使用這樣的事情在春天一個緩存的連接工廠:

<bean id="cachedConnectionFactory" 
class="org.springframework.jms.connection.CachingConnectionFactory" 
p:targetConnectionFactory-ref="jmsConnectionFactory" 
p:sessionCacheSize="10" /> 

然後使用它來代替原來的JMS連接。