2017-06-16 31 views
0

我正在構建在Jetty上運行war文件的Docker容器,並且我一直在交替進行一些設置以查看性能是否有所提高,但目前爲止尚未提供。每個容器已達到7 tps。MQ Listener性能

的設置

<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="MQConnectionFactory" /> 
    <property name="sessionCacheSize" value="10"/> 
</bean> 


<bean id="requestQueue" class="com.ibm.mq.jms.MQQueue"> 
    <constructor-arg index="0" value="${queuemanager}"/> 
    <constructor-arg index="1" value="${incoming.queue}"/> 
</bean> 


<integration:poller id="poller" default="true" fixed-delay="1000" error-channel="errorChannel"/> 

如何改進線程的數目處理在這裏?

另外,我的連接工廠細節如下所示

@Bean(name="DefaultJmsListenerContainerFactory") 
public DefaultJmsListenerContainerFactory provideJmsListenerContainerFactory(PlatformTransactionManager transactionManager) { 
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); 
    factory.setConnectionFactory(connectionFactory());  
    factory.setTransactionManager(transactionManager); 
    factory.setConcurrency(jmsConcurrency); 
    factory.setCacheLevel(jmsCacheLevel); 
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE); 
    factory.setSessionTransacted(true); 

    return factory; 
} 


@Bean(name = "txManager") 
public PlatformTransactionManager provideTransactionManager() {   
    return new JmsTransactionManager(connectionFactory()); 
} 

@Bean(name = "JmsTemplate") 
public JmsTemplate provideJmsTemplate() { 
    JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory());   
    jmsTemplate.setReceiveTimeout(Long.parseLong(env.getRequiredProperty(RECEIVE_TIMEOUT))); 
    return jmsTemplate; 
} 

@Bean(name="MQConnectionFactory") 
public ConnectionFactory connectionFactory() { 

    if (factory == null) { 
     factory = new MQXAConnectionFactory(); 
     try { 
      factory.setHostName(env.getRequiredProperty(HOST)); 
      factory.setPort(Integer.parseInt(env.getRequiredProperty(PORT)));    
      factory.setQueueManager(env.getRequiredProperty(QUEUE_MANAGER)); 
      factory.setChannel(env.getRequiredProperty(CHANNEL)); 
      factory.setTransportType(WMQConstants.WMQ_CM_CLIENT); 

     } catch (JMSException e) { 
      throw new RuntimeException(e); 
     } 
    } 
    return factory; 
} 

的初始設置爲併發是「1-2」和我改變了到'10 -15' 。沒有影響性能。

jmsCache被設置爲3 (Consumer cache),但在那裏也沒有改變。

任何幫助,非常感謝。

乾杯 克里斯

+0

你能告訴我們關於你的系統的其他一些事情嗎?你有多少個推杆?發送消息的速率是多少?你有多少個併發getter?是否有併發消息讓他們處理或者一個吸氣劑能跟上推杆?每個交易都要做什麼才能讓您全面瞭解系統的性能? –

+0

在這個時候,推杆是由NFT團隊使用LoadRunner模擬的,具有100 tps。我有兩個容器運行的實例,這意味着我們達到了15個tps。我想通過在DefaultJmsListenerContainerFactory中將併發性設置爲'10 -15',這實際上允許多個線程並行處理。應用程序的另一部分將json消息從1格式轉換爲另一部分,並將HTTP請求發送到在DB中執行插入操作的Api。 – krisrr3

+0

這也是我對setConcurrency的理解。你看到你的隊列中有多少個getter?試試MQSC命令'DISPLAY QSTATUS(q-name)IPPROCS' –

回答

0

這裏回答我自己的職位。我們發現,問題實際上是我們的數據庫池不能正確設置。

但爲了增加監聽器計數,我不得不改變我的Spring集成適配器設置

<jms:message-driven-channel-adapter id="jmsIn" 
     destination="requestQueue" 
     channel="inputJsonConversionChannel" 
     connection-factory="cachingConnectionFactory" 
     error-channel="errorChannel" 
     concurrent-consumers="${jms_adapter_concurrent_consumers}" /> 

只有當併發消費者是多種多樣的,確實在隊列增加聽衆的數量。