zoukankan      html  css  js  c++  java
  • 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) 前后端隔离,屏蔽高安全区
  • 相关阅读:
    LeetCode 226. Invert Binary Tree
    LeetCode 221. Maximal Square
    LeetCode 217. Contains Duplicate
    LeetCode 206. Reverse Linked List
    LeetCode 213. House Robber II
    LeetCode 198. House Robber
    LeetCode 188. Best Time to Buy and Sell Stock IV (stock problem)
    LeetCode 171. Excel Sheet Column Number
    LeetCode 169. Majority Element
    运维工程师常见面试题
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/8482138.html
Copyright © 2011-2022 走看看