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大师发表,拒绝转载,转载需要作者授权

  • 相关阅读:
    webpack+babel+transform-runtime, IE下提示Promise未定义?
    《Create Your own PHP Framework》笔记
    Windows,Mac与Linux哪个更适合开发者?
    微信公众号开发——通过ffmpeg解决amr文件无法播放问题
    Paypal如何实现循环扣款(订阅)?
    软件随想——为什么你需要提高软件的技术水平?
    react-native-image-picker在IOS上总是返回”Can’t find variable:response”的错误?
    解决angular-deckgrid高度不均衡和重加载的问题
    Linux多台服务器间SSH免密码登录配置
    关于macOS Sierra无法使用gdb进行调试的解决方案
  • 原文地址:https://www.cnblogs.com/demodashi/p/8491121.html
Copyright © 2011-2022 走看看