首页

关于通过ActiveMQ使用异步消息队列服务测试代码示例

标签:activemq,apache,消息队列,jms,消息,ActiveMQ,java,中间件     发布时间:2015-08-21   

一、下载ActiveMQ

先下载apache-activemq-5.5-SNAPSHOT.rar,如果没有,请点击到资源下载页面进行下载

二、配置ActiveMQ

解压apache-activemq-5.5-SNAPSHOT.rar,进入conf目录,找到activemq.xml文件,找到如下行进行配置消息队列服务端口

<transportConnectors>@b@     <transportConnector name="openwire" uri="tcp://127.0.0.1:9999"/>@b@</transportConnectors>

然后启动bin目录下activemq.bat文件,效果如下图

关于通过ActiveMQ使用异步消息队列服务测试代码示例

三、测试工程

创建一个ActiveMQ测试工程,引入依赖jar包如下(复制lib目录、lib目录的web子目录及optional子目录的所有jar包到测试工程中),具体如下图所示

关于通过ActiveMQ使用异步消息队列服务测试代码示例

发送消息类Sender.java

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

接受消息类Receiver.java

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

首先运行Sender.java类,日志脚本如下:

发送消息:消息内容1@b@发送消息:消息内容2@b@发送消息:消息内容3

再运行Receiver.java类,结果如下:

收到消息消息内容1@b@收到消息消息内容2@b@收到消息消息内容3
<<热门下载>>