2011-10-18 20 views
7

मैं एक जावा वर्ग है, जो एक ActiveMQ दलाल के लिए एक ActiveMQ दलाल की स्थिति (या कनेक्टिविटी की जाँच करने का एकमात्र उद्देश्य है के रूप में एक आउटेज नेटवर्क कनेक्टिविटी खोने ग्राहक के रूप में परिभाषित किया जा सकता बनाना चाहते हैं की जाँच करें भी)।एक ActiveMQ दलाल की स्थिति

तो मूल रूप से दलाल की स्थिति की जांच करने के लिए प्रत्येक कुछ सेकंड के बाद एक थ्रेड चल रहा होगा और यदि ब्रोकर डाउन हो गया है, तो मैं समर्थन समूह और उस तरह की चीजें मेल करने का कुछ विशिष्ट कार्य करना चाहता हूं।

उदाहरण ऑनलाइन पर्याप्त विस्तृत व्याख्या करने के लिए कैसे ऊपर प्राप्त किया जा सकता नहीं कर रहे हैं।

कोई पहले से ही यह किया गया है, या ऐसा करने के लिए एक अच्छा तरीका सुझाव है कि कर सकते हैं ??

धन्यवाद, नीरज

उत्तर

6

दलाल करने के लिए एक Testmessage भेजें:

try { 
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
    Connection conn = factory.createConnection(user, password); 
    Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    MessageProducer producer = session.createProducer("test"); 
    MessageConsumer consumer = session.createConsumer("test"); 
    consumer.setMessageListener(this); // class that implements MessageListener 
    conn.start(); 
    TextMessage message = new ActiveMQTextMessage(); 
    message.setText("TestMessage"); 
    producer.send(message); 
} catch (JMSException e) { 
    // somethings very wrong 
} 

कनेक्ट, संदेश भेजते हैं, यदि आप संदेश प्राप्त: सब ठीक है। नहीं तो ....

thats मुझे क्या करना। इसके अलावा मैं कुछ अन्य सामान करता हूं:

  • महत्वपूर्ण घटनाओं (जैसे सलाहकार.एफयूएलएल) प्राप्त करने के लिए कई सलाहकार विषयों को सुनें जो महत्वपूर्ण संकेतक हैं जो कुछ गलत हैं।
  • संदेश मेमोरी आकार और संदेश स्टोर की निगरानी के लिए नियमित रूप से आंकड़े प्लगइन से ब्रोकर आंकड़े प्राप्त करते हैं।
  • एक मृत पत्र कतार को कॉन्फ़िगर करें ताकि मुझे पता चले कि उपभोक्ता द्वारा एक संदेश अस्वीकार कर दिया गया था।
+0

कैच ब्लॉक निष्पादित होता जा भले ही दलाल नीचे है और जवाब नहीं है? या अगर कोई एक विशाल नेटवर्क देरी है? – Neeraj

+0

जब ब्रोकर बना है तो कनेक्शन कनेक्शन विफल हो जाता है और अपवाद पकड़ा जाएगा। यदि आप बस नेटवर्क विलंब की जांच करना चाहते हैं तो आपको सर्वर को दूरस्थ गंतव्य से मैन्युअल रूप से पिंग करना होगा।लूपबैक डिवाइस कभी धीमा नहीं होता है। – Laures

7

निम्नलिखित भी अगर ActiveMQ है और चल रहा है की जाँच करने के लिए काम करेंगे:

try { 
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url); 
    // set transport listener so that active MQ start is notified. 
    factory.setTransportListener(transportListenerObject); 
    Connection connection = factory.createConnection(); 
    // This will throw error if activeMQ is not running. 
    connection.setClientID("my_client_id"); 
} catch (JMSException ex) { 
    if (ex.getLinkedException() instanceof IOException) { 
     // ActiveMQ is not running. Do some logic here. 
     // use the TransportListener to restart the activeMQ connection 
     // when activeMQ comes back up. 
    } else { 
     // Something seriously went wrong with the factory or connection 
     // creation. Abort the process here, as nothing can be done. 
     // Log the error and troubleshoot. 
    } 
} 
+0

यह क्यों कम किया गया था? – Anand

+0

सक्रिय एमक्यू ब्रोकर वापस आने पर पुनरारंभ करने के लिए आप ट्रांसपोर्टलिस्टर का उपयोग कैसे कर सकते हैं? – CoderX

7

मैं एक ही सवाल के लिए एक समाधान की जरूरत है, यही कारण है कि मैं इसके बारे में और अधिक पढ़ सकते हैं और कई परीक्षण किए गए हैं।

एक परीक्षण संदेश (के रूप में Laures सुझाव) भेजा जा रहा है कुछ वातावरण में एक समस्या हो सकती।

"सामान्य" तरीका एक ट्रांसपोर्टलिस्टर (Anand सुझाए गए) को सेट करना होगा, लेकिन वास्तव में प्रदान किए गए इंटरफ़ेस को लागू करें और रिपोर्ट की गई घटनाओं पर प्रतिक्रिया दें।

अन्य ActiveMQ newbies के लिए (जैसा कि मैं पिछले महीने तक था) मैं नमूना स्टार्टअप कार्यान्वयन पोस्ट करता हूं। यह सिर्फ प्रत्येक घटना के लिए लॉगिंग लिखता है। उदाहरण के लिए: एक असली वातावरण में एक transportResumed() या इसी तरह के और बहुत सी बातें अधिक तक transportInterupted() में पुनः कनेक्ट परीक्षण के बारे में सोच सकते हैं ...

import java.io.IOException; 

import org.apache.activemq.transport.TransportListener; 
import org.apache.log4j.Logger; 

class ConnectionStateMonitor 
    implements TransportListener 
{ 
    private static final Logger log = Logger.getLogger(ConnectionStateMonitor.class); 

    @Override 
    public void onCommand(Object command) 
    { 
    log.debug("Command detected: '" + command + "'"); 
    } 

    @Override 
    public void onException(IOException exception) 
    { 
    log.error("Exception detected: '" + exception + "'"); 
    } 

    @Override 
    public void transportInterupted() 
    { 
    log.error("Transport interuption detected."); 
    } 

    @Override 
    public void transportResumed() 
    { 
    log.info("Transport resumption detected."); 
    } 
} 

TransportListener सेट किया जा सकता .:

ActiveMQConnection connection = (ActiveMQConnection) _factory.createConnection(); 
... 
connection.addTransportListener(new ConnectionStateMonitor()); 

मज़ा!

+0

इसके अलावा, आप कनेक्शन यूआरआई में विफलता का भी उपयोग कर सकते हैं, "विफलता: टीसीपी: // होस्ट: पोर्ट"। यह सॉकेट अपवाद होने पर क्लाइंट को स्वचालित रूप से फिर से कनेक्ट करने के लिए बताएगा: http://activemq.apache.org/how-can-i-support-auto-reconnection.html –

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