2010-02-23 9 views
7

मैं समझ नहीं पा रहा हूं कि ActiveMQ का स्थानीय रूप से उपयोग कैसे करें।
मान लीजिए मेरे पास 2 मशीनें हैं, जिन्हें कुछ संदेशों का आदान-प्रदान करने की आवश्यकता है।
मशीन पर पर मैं ActiveMQ दलाल शुरू:कोई सक्रिय एमक स्थानीय रूप से कैसे उपयोग कर सकता है?

> ~/bin/activemq 

और की तरह कुछ का उपयोग करें: jndi.properties में

javax.naming.Context ctx = new InitialContext(); 

    TopicConnectionFactory factory = (TopicConnectionFactory)ctx.lookup("connectionFactory"); 
    conn = factory.createTopicConnection(); 

    TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE); 
    Topic topic = null; 
    try{ 
     topic = (Topic)ctx.lookup("MyTopic"); 
     System.out.println("MyTopic was found"); 
    }catch(NameNotFoundException nnfe){ 
     topic = session.createTopic("MyTopic"); 
     System.out.println("MyTopic was created"); 
    } 
    TextMessage textMessage = session.createTextMessage(); 
    TopicPublisher publisher = session.createPublisher(topic); 
    conn.start(); 

    textMessage.setText("My topic message number"); 
    publisher.publish(textMessage); 
    System.out.println("sendMessage2topic"); 

मैं कहाँ है:

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 
java.naming.provider.url = tcp://localhost:61616 

लेकिन मैं क्या बनाना चाहिए इस विषय पर सब्सक्राइब करने के लिए दूसरी मशीन पर? शोल मैं 2-एनडी मशीन पर दूसरा स्थानीय एक्टिव एमक्यू ब्रोकर बनाता हूं, और पहली मशीन पर रिमोट विषय पर सब्सक्राइब कैसे करें ???

उत्तर

6

इस लाइन ...

java.naming.provider.url = tcp://localhost:61616 

... अपने connectionFactory बताता लूपबैक इंटरफेस के साथ कनेक्ट करने के लिए। आप रिमोट ब्रोकर का पता यहां निर्दिष्ट कर सकते हैं।

ऐसे मामले में आपका स्निपेट रिमोट ब्रोकर को संदेश भेजेगा। अब यह पंजीकृत ग्राहकों (स्थानीय और दूरस्थ दोनों) पर संदेश वितरित करने के लिए दलाल पर निर्भर है।

इस परिदृश्य में कोई ब्रोकर नहीं बनाया गया है (न तो स्थानीय या दूरस्थ रूप से)। आप बस मौजूदा ब्रोकर से जुड़ते हैं। बेशक, आप एक स्थानीय ब्रोकर भी बना सकते हैं और दूरस्थ संदेशों को संदेशों को रूट करने के लिए इसे कॉन्फ़िगर कर सकते हैं (उदाहरण के लिए, आप इसे स्थिर/गतिशील नेटवर्क परिवहन या सहकर्मी नेटवर्क ट्रांसपोर्ट प्रोटोकॉल के माध्यम से कर सकते हैं)। ActiveMQ आपको एकीकरण टोपोलॉजीज और पैटर्न के बहुत प्रदान करता है - लेकिन पहले आपको यह परिभाषित करना होगा कि आप वास्तव में क्या हासिल करना चाहते हैं।

+0

क्या वह यूआरएल नहीं है जो जेएनडीआई कनेक्शन करता है? ब्रोकर से कनेक्ट करने के लिए यूआरएल कनेक्शन फैक्टरी ऑब्जेक्ट में एम्बेडेड नहीं होगा? –

6

लोकलहोस्ट: 61616 सक्रिय एमक्यू केवल लूपबैक (127.0.0.1) इंटरफ़ेस पर सुन देगा। मशीन के आईपी या 0.0.0.0 के बजाय इसका प्रयोग करें।

+0

ठीक उपयोग करना चाहते हैं के साथ IPADDRESS स्थानापन्न, पर मशीन पर मैं पहली बार मशीन का IP का उपयोग करेगा, लेकिन समस्या यह पहले की तरह ही है: दूसरी मशीन पर मैं क्या इस्तेमाल करना चाहिए? – rauch

+1

@rauch: मेरा मतलब यह है कि ActiveMQ ** ब्रोकर ** कॉन्फ़िगरेशन फ़ाइल, परिवहन में कनेक्टर तत्व tcp का उपयोग करता है। परिवहन की यूआरआई विशेषता कनेक्टर को स्थानीयहोस्ट – Elister

+0

के बजाय आईपी का उपयोग करना चाहिए अच्छा है !! पूरी तरह से "0.0.0.0" के बारे में भूल गए। इस तरह आप सर्वर पर लोकलहोस्ट का उपयोग कर सकते हैं और आप सर्वर के आईपी के साथ भी बाहरी रूप से कनेक्ट कर सकते हैं! –

1

आपको नीचे कुछ ऐसा उपयोग करने की आवश्यकता है। लक्ष्य आईपी आप

java.naming.provider.url = tcp://172.16.202.168:61616 
संबंधित मुद्दे