साथ निर्माता प्रदर्शन मैं वसंत, jms और ActiveMQ के आधार पर एक सरल निर्माता उपभोक्ता अनुकरण बनाया, मैं,jms वसंत
कनेक्शन सेटिंग्स दोनों पक्षों, उत्पादकों और उपभोक्ताओं से उच्च प्रदर्शन तक पहुँचने के लिए कोशिश कर रहा हूँ:
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="connectionFactory" />
</bean>
<amq:connectionFactory id="amqConnectionFactory" brokerURL="failover:(tcp://${broker.url}:61616)" />
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory" />
</bean>
<amq:queue id="queue" physicalName="queue" />
<beans:bean id="jsonMessageConverter" class="XXXXX.converter.JsonMessageConverter" />
उपभोक्ता सेटिंग्स:
<jms:listener-container concurrency="10"
acknowledge="auto" prefetch="1" message-converter="jsonMessageConverter" transaction-manager="transactionManager"
>
<jms:listener id="queueListener_1" destination="ooIntegrationQueue"
ref="myMessageListenerAdapter" />
</jms:listener-container>
<beans:bean id="myMessageListenerAdapter"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter" >
<beans:property name="delegate" ref="consumer"/>
</beans:bean>
<beans:bean id="consumer" class="XXX.ConsumerImpl"/>
निर्माता सेटिंग्स:
<beans:bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
p:connectionFactory-ref="connectionFactory" p:messageConverter-ref="jsonMessageConverter"
p:defaultDestination-ref="ooIntegrationQueue" p:sessionTransacted="true" />
उपभोक्ता के साथ शुरू, मैं प्रति सेकंड के बारे में 25 संदेश उपभोग करने के लिए जो बेहद धीमी गति से है में कामयाब रहे, मैं टोंटी की खोज की तथ्य यह है कि मैं लेनदेन का उपयोग कर रहा, थोड़ा के लिए googling के बाद, और के साथ खेल होना करने के लिए कॉन्फ़िगरेशन, मैं पता चला कि DefaultMessageListenerContainer autowiring और CacheLevel बदलने के बाद
प्रति सेकंड लगभग 1500 संदेशों में मेरे प्रदर्शन बढ़ जाती हैlistenerContainer.setCacheLevelName("CACHE_SESSION")
अभी भी लेन-देन करते हुए।
मेरी समस्या निर्माता जो अभी भी प्रति सेकंड के बारे में 25 आपरेशन पर अटक गया है के साथ अब है, मेरी निर्माता परीक्षण सरल है:
int numOfMessages = getNumberOfMessages();
double startTime = System.currentTimeMillis();
for (int i = 1; i <= numOfMessages; i++) {
jmsTemplate.convertAndSend("HelloWorld" + i);
}
double endTime = System.currentTimeMillis();
double totalTime=(endTime-startTime)/1000;
System.out.println("Time - "+totalTime+" seconds");
System.out.println("EPS - "+numOfMessages/totalTime);
मैं कैसे निर्माता के साथ समान प्रदर्शन तक पहुँचने के लिए सोच रहा हूँ के बाद से, अब यह पूरी प्रणाली को बाधित करता है।
अच्छी तरह से संदेश लगातार नहीं हैं, मैंने jms टेम्पलेट डीबग किया है और सत्र और निर्माता कैश किए गए हैं, मैंने वसंत के बिना मूल उदाहरण का प्रयास करने का निर्णय लिया है, और जैसा कि यह निकलता है (जो समझ में आता है) प्रति संदेश सत्र, एक ही प्रदर्शन में परिणाम, केवल कुछ निश्चित संदेशों को उछालते हैं और फिर लेनदेन करने से मुझे वांछित परिणाम मिलते हैं। – Matan
यदि एक सादा वेनिला परीक्षण और वसंत आधारित परीक्षण में एक ही प्रदर्शन होता है तो आप ब्रोकर पर बाधा डाल सकते हैं। 25/एस प्रति संदेश 40ms के बराबर है। ब्रोकर एक्स (और चाहे भेज एसिंक है या नहीं) के आधार पर यह काफी उचित हो सकता है और इस पर निर्भर करता है कि यह संदेश को कैसे प्रबंधित करता है और यह किस हार्डवेयर पर चलता है। डिफ़ॉल्ट वितरण मोड क्या है? मेरा अनुमान 'PERSISTENT' है, यदि ऐसा है तो' NON_PERSISTENT' पर स्विच करने का प्रयास करें और आपको थ्रूपुट ऊपर जाना चाहिए। आपको एसिंक भेजना भी देखना चाहिए यदि यह पहले से ही डिफॉल्ट नहीं है। – Matt