2010-12-23 17 views
7

के लिए बुनियादी कदम हाय सब कृपया नौसिखिए के लिए जेएमएस के साथ ActiveMQ के बारे में कुछ बुनियादी जानकारी दें। और विन्यास कदम भी।एक्टिवएमक्यू और जेएमएस: नौसिखिए

+3

नीचे मतदाताओं के लिए: यह सवाल कई वर्षों से पहले पूछा गया था, मैं जानता हूँ कि यह है एक कम गुणवत्ता वाला सवाल, लेकिन डाउनवॉट्स के लायक नहीं है। कम से कम अपनी टिप्पणी यहां जोड़ें। अपने दरवाजे से अपने स्वयं और डाउनवोट को छिपाएं .. –

+0

क्या आपको सक्रिय एमक्यू इंस्टॉलेशन के लिए चरण-दर-चरण मार्गदर्शिका मिलती है उदाहरण के साथ? –

+0

@ सेल्वामआर संख्या .. लेकिन मैंने नीचे दिए गए उत्तर को जोड़ा जो आपको ऐसा करने में मदद कर सकता है ... –

उत्तर

16

हम मल्टीथ्रेडिंग का उपयोग कर कंसोल आधारित एप्लिकेशन बनाने जा रहे हैं। तो कंसोल अनुप्रयोग के लिए एक जावा परियोजना बनाएँ।

अब इन चरणों का पालन ..........

  1. को javax.jms.jar, ActiveMQ सभी-5.3.0.jar, log4j-1.2.15.jar जोड़े आपकी परियोजना पुस्तकालय (आप http://www.jarfinder.com/ से ऊपर जार फ़ाइलों के सभी डाउनलोड कर सकते हैं।

  2. jndi.properties नामकरण फ़ाइल बनाने और उसे इन निम्नलिखित ग्रंथों पेस्ट .. (jndi.properties के लिए के विवरण सिर्फ यह गूगल)


# START SNIPPET: jndi 

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory 

# use the following property to configure the default connector 
java.naming.provider.url = tcp://localhost:61616 

# use the following property to specify the JNDI name the connection factory 
# should appear as. 
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry 
connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry 

# register some queues in JNDI using the form 
# queue.[jndiName] = [physicalName] 
queue.MyQueue = example.MyQueue 


# register some topics in JNDI using the form 
# topic.[jndiName] = [physicalName] 
topic.MyTopic = example.MyTopic 

# END SNIPPET: jndi 

जोड़े JMSConsumer.java


import javax.jms.*; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class JMSConsumer implements Runnable{ 
    private static final Log LOG = LogFactory.getLog(JMSConsumer.class); 

    public void run() { 
     Context jndiContext = null; 
     ConnectionFactory connectionFactory = null; 
     Connection connection = null; 
     Session session = null; 
     MessageConsumer consumer = null; 
     Destination destination = null; 
     String sourceName = null; 
     final int numMsgs; 
     sourceName= "MyQueue"; 
     numMsgs = 1; 
     LOG.info("Source name is " + sourceName); 
     /* 
     * Create a JNDI API InitialContext object 
     */ 
     try { 
      jndiContext = new InitialContext(); 
     } catch (NamingException e) { 
      LOG.info("Could not create JNDI API context: " + e.toString()); 
      System.exit(1); 
     } 

     /* 
     * Look up connection factory and destination. 
     */ 
     try { 
      connectionFactory = (ConnectionFactory)jndiContext.lookup("queueConnectionFactory"); 
      destination = (Destination)jndiContext.lookup(sourceName); 
     } catch (NamingException e) { 
      LOG.info("JNDI API lookup failed: " + e); 
      System.exit(1); 
     } 


     try { 
      connection = connectionFactory.createConnection(); 
      session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
      consumer = session.createConsumer(destination); 
      connection.start(); 
      try { 
       Thread.sleep(2000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      MessageListener listener = new MyQueueMessageListener(); 
      consumer.setMessageListener(listener); 
      //Let the thread run for some time so that the Consumer has suffcient time to consume the message 
      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } catch (JMSException e) { 
      LOG.info("Exception occurred: " + e); 
     } finally { 
      if (connection != null) { 
       try { 
        connection.close(); 
       } catch (JMSException e) { 
       } 
      } 
     } 
    } 

    } 

जोड़ें JMSProducer.java


import javax.jms.*; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 


public class JMSProducer implements Runnable{ 
private static final Log LOG = LogFactory.getLog(JMSProducer.class); 

public JMSProducer() { 
} 

//Run method implemented to run this as a thread. 
public void run(){ 
Context jndiContext = null; 
ConnectionFactory connectionFactory = null; 
Connection connection = null; 
Session session = null; 
Destination destination = null; 
MessageProducer producer = null; 
String destinationName = null; 
final int numMsgs; 
destinationName = "MyQueue"; 
numMsgs = 5; 
LOG.info("Destination name is " + destinationName); 

/* 
* Create a JNDI API InitialContext object 
*/ 
try { 
    jndiContext = new InitialContext(); 
} catch (NamingException e) { 
    LOG.info("Could not create JNDI API context: " + e.toString()); 
    System.exit(1); 
} 

/* 
* Look up connection factory and destination. 
*/ 
try { 
    connectionFactory = (ConnectionFactory)jndiContext.lookup("queueConnectionFactory"); 
    destination = (Destination)jndiContext.lookup(destinationName); 
} catch (NamingException e) { 
    LOG.info("JNDI API lookup failed: " + e); 
    System.exit(1); 
} 

/* 
* Create connection. Create session from connection; false means 
* session is not transacted.create producer, set the text message, set the co-relation id and send the message. 
*/ 
try { 
    connection = connectionFactory.createConnection(); 
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    producer = session.createProducer(destination); 
    TextMessage message = session.createTextMessage(); 
    for (int i = 0; i

जोड़े MyQueueMessageListener.java


import java.io.*; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import javax.jms.*; 


public class MyQueueMessageListener implements MessageListener { 
    private static final Log LOG = LogFactory.getLog(MyQueueMessageListener.class); 
    /** 
    * 
    */ 
    public MyQueueMessageListener() { 
    // TODO Auto-generated constructor stub 
    } 

    /** (non-Javadoc) 
    * @see javax.jms.MessageListener#onMessage(javax.jms.Message) 
    * This is called on receving of a text message. 
    */ 
    public void onMessage(Message arg0) { 
     LOG.info("onMessage() called!"); 
     if(arg0 instanceof TextMessage){ 
      try { 
       //Print it out 
       System.out.println("Recieved message in listener: " + ((TextMessage)arg0).getText()); 

       System.out.println("Co-Rel Id: " + ((TextMessage)arg0).getJMSCorrelationID()); 
       try { 
        //Log it to a file 
        BufferedWriter outFile = new BufferedWriter(new FileWriter("MyQueueConsumer.txt")); 
        outFile.write("Recieved message in listener: " + ((TextMessage)arg0).getText()); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } catch (JMSException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     }else{ 
      System.out.println("~~~~Listener : Error in message format~~~~"); 
     } 

    } 

    } 

SimpleApp.java

 

public class SimpleApp { 

    //Run the producer first, then the consumer 
    public static void main(String[] args) throws Exception { 
     runInNewthread(new JMSProducer()); 
     runInNewthread(new JMSConsumer()); 
    } 

    public static void runInNewthread(Runnable runnable) { 
     Thread brokerThread = new Thread(runnable); 
     brokerThread.setDaemon(false); 
     brokerThread.start(); 
    } 

} 

अब आरयू जोड़े n SimpleApp.java वर्ग।

सभी दा सर्वश्रेष्ठ। हैप्पी कोडिंग

+0

हाय, आपके उत्तर के लिए धन्यवाद। क्या आप इस पर कुछ प्रकाश डाल सकते हैं और मेरी मदद कर सकते हैं। आपके समय के लिए धन्यवाद। – Kumar

0

यहां यह ActiveMQ और अपाचे कैमल के लिए एक साधारण जूनिट परीक्षण है। यह दो प्रौद्योगिकियां एक साथ बहुत अच्छी तरह से काम करती हैं।

आप कोड के बारे में अधिक जानकारी के चाहते हैं, आप अपने ब्लॉग में एक पोस्ट पा सकते हैं:

http://ignaciosuay.com/unit-testing-active-mq/

public class ActiveMQTest extends CamelTestSupport { 

    @Override 
    protected CamelContext createCamelContext() throws Exception { 
     CamelContext camelContext = super.createCamelContext(); 

     ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"); 
     camelContext.addComponent("activemq", jmsComponentClientAcknowledge(connectionFactory)); 

     return camelContext; 
    } 

    @Override 
    protected RouteBuilder createRouteBuilder() throws Exception { 
     return new RouteBuilder() { 

      @Override 
      public void configure() throws Exception { 

      from("mina:tcp://localhost:6666?textline=true&sync=false") 
      .to("activemq:processHL7"); 

      from("activemq:processHL7") 
       .to("mock:end"); 
      } 
     }; 
    } 

    @Test 
    public void testSendHL7Message() throws Exception { 
     MockEndpoint mock = getMockEndpoint("mock:end"); 

     String m = "MSH|^~\\&|hl7Integration|hl7Integration|||||ADT^A01|||2.5|\r" + 
       "EVN|A01|20130617154644\r" + 
       "PID|1|465 306 5961||407623|Wood^Patrick^^^MR||19700101|1|\r" + 
       "PV1|1||Location||||||||||||||||261938_6_201306171546|||||||||||||||||||||||||20130617134644|"; 

     mock.expectedBodiesReceived(m); 

     template.sendBody("mina:tcp://localhost:6666?textline=true&sync=false", m); 

     mock.assertIsSatisfied(); 
    } 
संबंधित मुद्दे