zoukankan      html  css  js  c++  java
  • activeMQ Jms Demo

    概述

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位

    详细

    一、什么是ActiveMQ

      百度解释:

      ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

      https://baike.baidu.com/item/ActiveMQ/7889688?fr=aladdin

    二、安装ActiveMQ

      windows

      访问ActiveMQ官网下载ActiveMq

      http://activemq.apache.org/

      

      下载完毕后,直接解压即可,然后进入bin目录,选择运行位数(32位,64位)

      1)可以点击InstallService.bat 直接启动

      2)也可以点击activemq.bat 安装到window服务,每次电脑启动时就会自动启动

      

      

    三、访问ActiveMQ

      打开浏览器输入:http://127.0.0.1:8161 如下图,登录的名称和密码都是:admin

      

      

      看到上图即代表登录成功了!!!

    四、编写demo代码

    Maven项目结构:

    image.png

    代码截图:

    image.png

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.zy.jms</groupId>
        <artifactId>jms</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>5.9.0</version>
            </dependency>
        </dependencies>
    
    </project>

    生产者:AppProducer

    package com.zy.jsm.queue;
    
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    import javax.jms.*;
    
    /**
     * Created by Yan on 2017/9/12.
     */
    public class AppProducer {
    
        private static final String url = "tcp://127.0.0.1:61616";
        private static final String queueName = "queue_message";
    
        public static void main(String[] args) throws JMSException {
            //1.创建连接工场
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
            //2.创建连接
            Connection connection = connectionFactory.createConnection();
            //3.启动连接
            connection.start();
            //4.创建会话
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //5.创建一个目标
            Destination destination = session.createTopic(queueName);
            //6.创建生产者
            MessageProducer producer = session.createProducer(destination);
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);
            for (int i = 0; i < 100; i++) {
                //7.创建消息
                TextMessage textMessage = session.createTextMessage("activeMQ" + i);
                producer.send(textMessage);
            }
            System.out.print("所有消息已经全部发送完了");
            connection.close();
        }
    }

    消费者:AppCusumer

    package com.zy.jsm.queue;
    
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    import javax.jms.*;
    
    /**
     * Created by Yan on 2017/9/12.
     */
    public class AppConsumer {
        private static final String url = "tcp://127.0.0.1:61616";
        private static final String queueName = "queue_message";
    
        public static void main(String[] args) throws JMSException {
            //1.创建连接工场
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
            //2.创建连接
            Connection connection = connectionFactory.createConnection();
            //3.启动连接
            connection.start();
            //4.创建会话
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //5.创建一个目标
            Destination destination = session.createQueue(queueName);
            //6.创建消费者
            MessageConsumer consumer = session.createConsumer(destination);
            //7.创建一个监听器
            consumer.setMessageListener(new MessageListener() {
                public void onMessage(Message message) {
                    TextMessage textMessage = (TextMessage) message;
                    try {
                        System.out.println("接收消息:" + textMessage.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }
                }
            });
            //connection.close();
        }
    }

    五、说明

      代码是演示的队列模式,还有一种是主题模式

      如果要用主题模式可以修改代码码如下:

      Destination destination = session.createQueue(queueName);

      改为:

      Destination destination = session.createTopic(topicName);

      即可!!!

      设置持久化:

      producer.setDeliveryModel(DeliveryMode.PERSISTENT);

    六、比较

      队列模式:在点对点的传输方式中,消息数据被持久化,每条消息都能被消费,没有监听QUEUE地址也能被消费,数据不会丢失,一对一的发布接受策略,保证数据完整。

      主题模式:在发布订阅消息方式中,消息是无状态的,不保证每条消息被消费,只有监听该TOPIC地址才能收到消息并消费,否则该消息将会丢失。一对多的发布接受策略,可以同时消费多个消息。

    注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

  • 相关阅读:
    使用python脚本自动创建pip.ini配置文件
    Windows 安全软件集
    配置 vim 编辑器
    (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)
    转 10 个最佳的 Node.js 的 MVC 框架
    转-基于NodeJS的14款Web框架
    (转) [it-ebooks]电子书列表
    (原创) alljoyn物联网实验之手机局域网控制设备
    (原创)天气又转热了,我给她做了个智能小风扇
    Alljoyn瘦客户端库介绍(官方文档翻译 下)
  • 原文地址:https://www.cnblogs.com/demodashi/p/8491121.html
Copyright © 2011-2022 走看看