千家信息网

Apache中ActiveMQ消息传递的示例分析

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,小编给大家分享一下Apache中ActiveMQ消息传递的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.下载A
千家信息网最后更新 2025年01月19日Apache中ActiveMQ消息传递的示例分析

小编给大家分享一下Apache中ActiveMQ消息传递的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.下载ActiveMQ

下载activeMQ:http://activemq.apache.org/

我这里用的是5.9.0版本

2.运行ActiveMQ

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

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

3.创建Eclipse项目并运行

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

3.1.Sender.java

package per.activemq.test;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;                                // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar                connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://127.0.0.1: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) {                        // TODO: handle exception                } finally {            try {                if (null != connection)                    connection.close();            } catch (Throwable ignore) {            }        }                        }        private static void sendMessage(Session session, MessageProducer producer) throws Exception {                for (int i = 0; i < SEND_NUMBER; i++) {                        TextMessage message = session.createTextMessage("ActiveMQ发送的消息:"+i);                        // 发送消息到目的地方                        System.out.println("发送消息,ActiveMQ发送的消息:"+i);                        producer.send(message);                }                        }}

3.2.Receiver.java

package per.activemq.test;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://127.0.0.1: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) {                        // TODO: handle exception                } finally {            try {                if (null != connection)                    connection.close();            } catch (Throwable ignore) {            }        }                                        }}

4.注意事项

  1. 最后接收者跟发送者在不同的机器上测试

  2. 项目所引用的jar最后在ActiveMQ下的lib中找,这样不会出现版本冲突。

5.测试过程

刚开始运行Receiver以后console介面没有任何信息,运行Sender以后,Receiver中的console显示如下信息:

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

而回到Sender中发现console界面出现如下信息:

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

5.查看队列

很明显有消息了

以上是"Apache中ActiveMQ消息传递的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0