zoukankan      html  css  js  c++  java
  • ActionMQ5.8.0 JMS实例 手把手详细图解

    出自:http://blog.csdn.net/tongjie008/article/details/40687087

    ActionMQ 是开源的JMS实现

    1.下载ActiveMQ

    去官方网站下载:http://activemq.apache.org/

    2.运行ActiveMQ

    解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.8.0inactivemq.bat运行ActiveMQ程序。

    启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为FirstQueue。如下图

    目录结构如下:

    运行在网页中,它会让你登录用户方可进入,默认的用户名和密码是admin,

    3 . 测试
    ActiveMQ默认使用的TCP连接端口是61616,通过查看该端口的信息可以测试ActiveMQ是否成功启动
    window环境运行  netstat -an|find "61616"

    Class源代码中可以看到

    4.创建Eclipse JAVA项目并运行

    创建project:ActiveMQ-5.8,并导入apache-activemq-5.8.0lib目录下需要用到的jar文件,项目结构如下图所示:

    若找不到相应的包,使用以下连接下载也行 http://repo1.maven.org/maven2/org/apache/activemq/activemq-rar/

    3.1.Sender.java

    import javax.jms.Connection;  
    import javax.jms.ConnectionFactory;  
    import javax.jms.DeliveryMode;  
    import javax.jms.Destination;  
    import javax.jms.MessageProducer;  
    import javax.jms.Session;  
    import javax.jms.TextMessage;  
    import org.apache.activemq.ActiveMQConnection;  
    import org.apache.activemq.ActiveMQConnectionFactory;  
      
    public class Sender {  
        private static final int SEND_NUMBER = 5;  
      
        public static void main(String[] args) {  
            // ConnectionFactory :连接工厂,JMS 用它创建连接  
            ConnectionFactory connectionFactory;  
            // Connection :JMS 客户端到JMS Provider 的连接  
            Connection connection = null;  
            // Session: 一个发送或接收消息的线程  
            Session session;  
            // Destination :消息的目的地;消息发送给谁.  
            Destination destination;  
            // MessageProducer:消息发送者  
            MessageProducer producer;  
            // TextMessage message;  
            // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar  
            connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
            try {  
                // 构造从工厂得到连接对象  
                connection = connectionFactory.createConnection();  
                // 启动  
                connection.start();  
                // 获取操作连接  
                session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);  
                // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置  
                destination = session.createQueue("FirstQueue");  
                // 得到消息生成者【发送者】  
                producer = session.createProducer(destination);  
                // 设置不持久化,此处学习,实际根据项目决定  
                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
                // 构造消息,此处写死,项目就是参数,或者方法获取  
                sendMessage(session, producer);  
                session.commit();  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (null != connection)  
                        connection.close();  
                } catch (Throwable ignore) {  
                }  
            }  
        }  
      
        public static void sendMessage(Session session, MessageProducer producer)throws Exception {  
            for (int i = 1; i <= SEND_NUMBER; i++) {  
                TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i);  
                // 发送消息到目的地方  
                System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);  
                producer.send(message);  
            }  
        }  
    }  

    3.2.Receiver.java

    import javax.jms.Connection;  
    import javax.jms.ConnectionFactory;  
    import javax.jms.Destination;  
    import javax.jms.MessageConsumer;  
    import javax.jms.Session;  
    import javax.jms.TextMessage;  
    import org.apache.activemq.ActiveMQConnection;  
    import org.apache.activemq.ActiveMQConnectionFactory;  
      
    public class Receiver {  
        public static void main(String[] args) {  
            // ConnectionFactory :连接工厂,JMS 用它创建连接  
            ConnectionFactory connectionFactory;  
            // Connection :JMS 客户端到JMS Provider 的连接  
            Connection connection = null;  
            // Session: 一个发送或接收消息的线程  
            Session session;  
            // Destination :消息的目的地;消息发送给谁.  
            Destination destination;  
            // 消费者,消息接收者  
            MessageConsumer consumer;  
            connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");  
            try {  
                // 构造从工厂得到连接对象  
                connection = connectionFactory.createConnection();  
                // 启动  
                connection.start();  
                // 获取操作连接  
                session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  
                // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置  
                destination = session.createQueue("FirstQueue");  
                consumer = session.createConsumer(destination);  
                while (true) {  
                    // 设置接收者接收消息的时间,为了便于测试,这里设定为100s  
                    TextMessage message = (TextMessage) consumer.receive(100000);  
                    if (null != message) {  
                        System.out.println("收到消息" + message.getText());  
                    } else {  
                        break;  
                    }  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    if (null != connection)  
                        connection.close();  
                } catch (Throwable ignore) {  
                }  
            }  
        }  
    }  

    4.注意事项

    先启动apache-activemq-5.8.0inactivemq.bat运行ActiveMQ程序。在运行main方法,否则回报连接失败的错误,如下

    SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.  
    javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect  
        at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)  
        at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:293)  
        at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:238)  
        at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:184)  
        at cn.jms.Sender.main(Sender.java:32)  
    Caused by: java.net.ConnectException: Connection refused: connect  
        at java.net.PlainSocketImpl.socketConnect(Native Method)  
        at java.net.PlainSocketImpl.doConnect(Unknown Source)  
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)  
        at java.net.PlainSocketImpl.connect(Unknown Source)  
        at java.net.SocksSocketImpl.connect(Unknown Source)  
        at java.net.Socket.connect(Unknown Source)  
        at org.apache.activemq.transport.tcp.TcpTransport.connect(TcpTransport.java:496)  
        at org.apache.activemq.transport.tcp.TcpTransport.doStart(TcpTransport.java:459)  
        at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)  
        at org.apache.activemq.transport.AbstractInactivityMonitor.start(AbstractInactivityMonitor.java:140)  
        at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
        at org.apache.activemq.transport.WireFormatNegotiator.start(WireFormatNegotiator.java:72)  
        at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
        at org.apache.activemq.transport.TransportFilter.start(TransportFilter.java:58)  
        at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:273)  
        ... 3 more  

    5.测试过程

    1、先运行Sender,输出以下信息,若先运行Receiver则无输出

    发送消息:ActiveMq 发送的消息1
    发送消息:ActiveMq 发送的消息2
    发送消息:ActiveMq 发送的消息3
    发送消息:ActiveMq 发送的消息4
    发送消息:ActiveMq 发送的消息5

    2、运行Receiver

    收到消息ActiveMq 发送的消息1
    收到消息ActiveMq 发送的消息2
    收到消息ActiveMq 发送的消息3
    收到消息ActiveMq 发送的消息4
    收到消息ActiveMq 发送的消息5

  • 相关阅读:
    PAT (Advanced Level) 1086. Tree Traversals Again (25)
    PAT (Advanced Level) 1085. Perfect Sequence (25)
    PAT (Advanced Level) 1084. Broken Keyboard (20)
    PAT (Advanced Level) 1083. List Grades (25)
    PAT (Advanced Level) 1082. Read Number in Chinese (25)
    HDU 4513 吉哥系列故事――完美队形II
    POJ Oulipo KMP 模板题
    POJ 3376 Finding Palindromes
    扩展KMP
    HDU 2289 Cup
  • 原文地址:https://www.cnblogs.com/onlymate/p/8523721.html
Copyright © 2011-2022 走看看