2008-09-06 11 views
13

पर पुन: कनेक्ट करना हमारे पास एक जावा श्रोता है जो JBossMQ में कतार के टेक्स्ट संदेशों को पढ़ता है। अगर हमें जेबॉस को रीबूट करना है, तो श्रोता फिर से कनेक्ट नहीं होगा और फिर से संदेश पढ़ना शुरू कर देगा। हम सिर्फ दो मिनट में श्रोता की लॉग फ़ाइल में संदेश प्राप्त करते हुए कहते हैं कि यह कनेक्ट नहीं हो सकता है। क्या ऐसा कुछ है जिसे हम अपने कोड में या JBossMQ में सेट नहीं कर रहे हैं? मैं जेएमएस के लिए नया हूं इसलिए किसी भी मदद की सराहना की जाएगी। धन्यवाद।JMS श्रोता को JBossMQ

+0

अच्छा सवाल। यह सब कुछ चलता है, इसलिए चर्चा दर्ज करना अच्छा होता है। –

उत्तर

10

आप अपने ग्राहक कोड javax.jms.ExceptionListener में लागू करना चाहिए। आपको अपवाद पर एक विधि की आवश्यकता होगी। जब ग्राहक का कनेक्शन गुम हो जाता है, तो आपको JMSException मिलना चाहिए, और यह विधि स्वचालित रूप से कॉल की जाएगी। केवल एक चीज जिसे आप देखना चाहते हैं वह यह है कि यदि आप जानबूझकर जेबॉसएमक्यू से डिस्कनेक्ट कर रहे हैं - जो एक अपवाद भी फेंक देगा।

कुछ कोड इस प्रकार दिखाई देंगे:

public void onException (JMSException jsme) 
    { 
     if (!closeRequested) 
     { 
      this.disconnect(); 
      this.establishConnection(connectionProps, queueName, uname, pword, clientID, messageSelector); 
     }   
     else 
     { 
      //Client requested close so do not try to reconnect 
     } 
    } 

अपने "establishConnection" कोड में, आप तो एक while(!initialized) निर्माण कि इसके अंदर आज़माएं/कैच शामिल लागू करेगा। जब तक आप सुनिश्चित न हों कि आपने ठीक से कनेक्ट किया है और सब्सक्राइब किया है, तो सभी जेएमएस/नामकरण/आदि को पकड़ते समय लूप के अंदर रहें। अपवाद नहीं।

हम JBossMQ साथ साल के लिए इस पद्धति का उपयोग किया और यह बहुत अच्छा काम करता है। जेएसओएसएमक्यू को उछालने या हमारे नेटवर्क कनेक्शन को खोने के बाद हमें कभी भी हमारे जेएमएस क्लाइंट में कोई समस्या नहीं आई है।

+0

नोट करें कि किसी को अपवाद लिस्टनर पंजीकृत करने के लिए कनेक्शन # सेटएक्सप्शन लिस्टनर (कम से कम कुछ जेएमएस प्रदाताओं के साथ) का उपयोग करना चाहिए। – Touko

8

मैं अत्यधिक चाहते आप Spring abstractions for JMS such as the MessageListenerContainer का उपयोग पुनर्संयोजन, लेन-देन और आप के लिए पूलिंग से निपटने के लिए सलाह देते हैं। आपको केवल एक संदेश लिस्टनर की आपूर्ति करने और कनेक्शन लिंक्स के साथ MessageListenerContainer को कॉन्फ़िगर करने की आवश्यकता है और कंटेनर शेष करता है।

6

यदि आप पूरी तरह से श्रोता हैं और नहीं कनेक्शन सेटअप के अलावा अन्य जेएमएस कॉल करते हैं, तो "ऑनएक्सप्शन() हैंडलर" उत्तर सही है।

यदि आप किसी भी JMS, अपने कोड में कॉल सिर्फ onException का उपयोग कर() कॉलबैक नहीं पर्याप्त है। समस्याएं एक JMS विधि कॉल या onException() कॉलबैक के माध्यम से पर एक अपवाद के माध्यम से एप्लिकेशन या तो को JMS प्रदाता से प्रसारित कर रहे हैं। दोनों नहीं

इसलिए यदि आप अपने कोड से किसी भी JMS तरीकों कहते हैं, तुम भी है कि पुनर्संयोजन तर्क आह्वान करने के लिए अगर आप उन कॉल पर किसी भी अपवाद मिल चाहता हूँ।

1

व्यक्तिगत अनुभव से सलाह का टुकड़ा। JBoss Messaging पर अपग्रेड करें। मैंने इसे बिना किसी समस्या के 4 महीने के लिए उत्पादन में देखा है। इसमें कई अन्य विशेषताओं के बीच पूरी तरह से पारदर्शी विफलता है।

इसके अलावा, यदि आप वसंत के साथ जाते हैं, तो carefulJmsTemplate के साथ हो।

संबंधित मुद्दे