2008-11-07 10 views
7

क्या जेएमएस कनेक्शन/सत्र/उपभोक्ता हमेशा खराब अभ्यास खोल रहा है?लंबे समय तक जेएमएस सत्र रहते थे। क्या जेएमएस कनेक्शन/जेएमएस सत्र रखना हमेशा खराब अभ्यास खोला जाता है?

कोड मसौदा उदाहरण:

// app startup code 

ConnectionFactory cf = (ConnectionFactory)jndiContext.lookup(CF_JNDI_NAME); 
Connection connection = cf.createConnection(user,pass); 
Session session = connection.createSession(true,Session.TRANSACTIONAL); 
MessageConsumer consumer = session.createConsumer(new Queue(queueName)); 
consumer.setMessageListener(new MyListener()); 
connection.start(); 
connection.setExceptionListener(new MyExceptionHandler()); // handle connection error 


// ... Message are processed on MyListener asynchronously ... 


// app shutdown code 

consumer.close(); 
session.close(); 
connection.close(); 

कोई सुझाव JMS उपयोग के इस पैटर्न में सुधार के लिए?

उत्तर

4

लंबे समय तक रहने वाले कनेक्शन से निपटने के दौरान यह एक बहुत ही आम और स्वीकार्य अभ्यास है। कई जेएमएस सर्वरों के लिए यह वास्तव में हर बार एक नया कनेक्शन बनाने के लिए बेहतर है।

6

सहमत हुए। यहां कुछ good tips on how to use JMS efficiently हैं जिनमें कनेक्शन/सत्र/उत्पादक/उपभोक्ताओं के आसपास रखना शामिल है।

यदि आप प्रदर्शन को अधिकतम करने में रुचि रखते हैं तो आप recommendation on using transactions भी जांचना चाहेंगे।

4

हमारे ऐप में, हमारे पास कनेक्शन/सत्र/उपभोक्ता/उत्पादक एक समय में महीनों के लिए खुले होंगे। हमें उस काम को भरोसेमंद बनाने के लिए हमारे विक्रेता (बीईए) के साथ काम करना पड़ा है। लेकिन इसके साथ कोई भी समस्या एक बग है जिसे विक्रेता को ठीक करने की ज़रूरत है।

+0

वास्तविक तैनाती के साथ साझा करने के अनुभव के लिए +1। –

5

लंबे समय तक कनेक्शन/सत्र/निर्माता/उपभोक्ता खोलने की पसंद आवृत्ति पर आधारित होना चाहिए जिस पर उत्पादक/उपभोक्ता संदेश भेजता/प्राप्त करता है।

यदि कोई निर्माता भेजता है या उपभोक्ता अक्सर संदेश प्राप्त करता है तो कनेक्शन/सत्र/निर्माता/उपभोक्ता को खुला रखा जाना चाहिए। दूसरी तरफ यदि संदेश भेजते/प्राप्त होते हैं तो यह अच्छा नहीं होता है कि इन जेएमएस ऑब्जेक्ट्स को खुले रखने से अच्छा नहीं होगा जैसे सॉकेट जैसे सिस्टम संसाधनों का उपभोग होगा।

0

एफवाईआई, बंद कनेक्शन (javax.jms.Connection) के सत्र, उत्पादक और उपभोक्ताओं को बंद करने की कोई आवश्यकता नहीं है। नीचे कोड संसाधन जारी करने के लिए पर्याप्त होना चाहिए:

try { 
     this.connection.close(); 
    } catch (JMSException e) { 
     // 
    } 
संबंधित मुद्दे