ActiveMQ和JMS:新手的基本步骤

ActiveMQ和JMS:新手的基本步骤,activemq,Activemq,大家好,请为新手介绍一些关于ActiveMQ和JMS的基本知识。还有配置步骤。我们将使用多线程创建一个基于控制台的应用程序。所以,为控制台应用程序创建一个java项目 现在按照以下步骤 将javax.jms.jar、activemq-all-5.3.0.jar、log4j-1.2.15.jar添加到项目库中。 (您可以从下载上述所有jar文件 创建一个名为jndi.properties的文件并粘贴以下文本..(Deatils for jndi.properties只需谷歌一下) 添加JMSCo

大家好,请为新手介绍一些关于ActiveMQ和JMS的基本知识。还有配置步骤。

我们将使用多线程创建一个基于控制台的应用程序。所以,为控制台应用程序创建一个java项目

现在按照以下步骤

  • 将javax.jms.jar、activemq-all-5.3.0.jar、log4j-1.2.15.jar添加到项目库中。 (您可以从下载上述所有jar文件

  • 创建一个名为jndi.properties的文件并粘贴以下文本..(Deatils for jndi.properties只需谷歌一下)


  • 添加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
    
    添加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(); } }
    公共类SimpleApp{ //首先运行生产者,然后运行消费者 公共静态void main(字符串[]args)引发异常{ runInNewthread(新JMSProducer()); runInNewthread(新JMSConsumer()); } 公共静态void runInNewthread(Runnable Runnable){ Thread brokerThread=新线程(可运行); brokerThread.setDaemon(false); brokerThread.start(); } }
    现在运行SimpleApp.java类


    这是一个针对ActiveMQ和ApacheCamel的简单junit测试。这两种技术配合得非常好

    如果您想了解有关代码的更多详细信息,可以在我的博客中找到一篇文章:


    反对票:这个问题在很多年前就被问到了,我知道这是一个低质量的问题,但不值得反对票。至少在这里添加你的评论。不要隐藏你自己和反对票从后门。你有没有关于activemq安装的一步一步的指南和例子?@SelvamR No。但是我在下面添加了一个答案,可以帮助你这么做…@PankajKumar嗨,Pankaj,请看一下这个问题。你对此有什么想法吗?谢谢你的时间。嗨,谢谢你的回答。你能帮我解释一下吗?谢谢你的时间。
    
    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~~~~");
            }
    
        }
    
        }
    
    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(); } }
    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();
        }