• Java消息队列ActiveMq 实战 仅此而已


    1、下载安装ActiveMQ


     ActiveMQ官网下载地址:http://activemq.apache.org/download.html

     ActiveMQ 提供了Windows 和Linux、Unix 等几个版本,楼主这里选择了Windows 版本下进行开发。

    下载完安装包,解压之后的目录:

     从它的目录来说,还是很简单的: 

      • bin存放的是脚本文件
      • conf存放的是基本配置文件
      • data存放的是日志文件
      • docs存放的是说明文档
      • examples存放的是简单的实例
      • lib存放的是activemq所需jar包
      • webapps用于存放项目的目录

    2、启动ActiveMQ 


     进入到ActiveMQ 安装目录的bin 目录,根据系统选择win32/win64,然后点击activemq.bat。

     点击之后,出现ActiveMQ已启动,这时候说明服务已经成功启动了,此时也能看到访问路径。

    ActiveMQ默认启动时,启动了内置的jetty服务器,提供一个用于监控ActiveMQ的admin应用。 

    我们在浏览器请求http://127.0.0.1:8161/admin/,然后输入账号密码(这里和tomcat 服务器类似)。

    默认账号密码:admin/admin

    到这里为止,ActiveMQ 服务端就启动完毕了。

    3、创建一个ActiveMQ工程


     项目目录结构:

    上述在官网下载ActiveMq 的时候,我们可以在目录下看到一个jar包:

     

    这个jar 包就是我们需要在项目中进行开发中使用到的相关依赖。

    3.1 创建生产者

    public class Sender {

        private static final int SEND_NUMBER = 5;

        private static final String QUEUE_NAME = "xwj_queue";

        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注意参数值QUEUE_NAME是一个服务器的queue,须在在ActiveMq的console配置
                destination = session.createQueue(QUEUE_NAME);
                // 得到消息生成者【发送者】
                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("xwj发送消息:" + i);
                // 发送消息到目的地方
                System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);
                producer.send(message);
            }
        }
     

    3.2 创建消费者

    public class Receiver {
        
        private static final String QUEUE_NAME = "xwj_queue";
        
        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(QUEUE_NAME);
                consumer = session.createConsumer(destination);
                while (true) {
                    // 设置接收者接收消息的时间,为了便于测试,这里谁定为100s
                    TextMessage message = (TextMessage) consumer.receive(10000);
                    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、运行ActiveMQ项目


     4.1、生产者开始生产消息

        执行Sender中的主方法,运行结果:

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

     

    4.2 消费者开始消费消息

       执行Receiver中的主方法,运行结果:

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

    查看运行结果,我们可以做ActiveMQ 服务端:http://127.0.0.1:8161/admin/ 里面的Queues 中查看我们生产的消息。

     

    5、ActiveMQ的特性


     5.1 ActiveMq 的特性 

    1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
    2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
    3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
    4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
    5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
    6. 支持通过JDBC和journal提供高速的消息持久化
    7. 从设计上保证了高性能的集群,客户端-服务器,点对点
    8. 支持Ajax
    9. 支持与Axis的整合
    10. 可以很容易得调用内嵌JMS provider,进行测试

     5.2 什么情况下使用ActiveMQ?

    1. 多个项目之间集成 
      (1) 跨平台 
      (2) 多语言 
      (3) 多项目
    2. 降低系统间模块的耦合度,解耦 
      (1) 软件扩展性
    3. 系统前后端隔离 
      (1) 前后端隔离,屏蔽高安全区
  • 相关阅读:
    MySQL 事务 清明
    ElasticSearch增删改查
    WinDbg常用命令系列内存查看d*
    WinDbg常用命令系列内存数据显示和对应符号显示d*s(dds、dps、dqs)
    WinDbg常用命令系列!heap
    WinDbg !teb
    Nodejs Stream(流)
    Nodejs 回调函数
    Vertx 简单介绍
    创建第一个应用Nodejs应用
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/8482138.html
Copyright © 2020-2023  润新知