• 基于JMS的ActiveMQ搭建与实现


    1.JMS

      Java消息服务(Java Message Service)即JMS,是一个Java平台中关于面向消息中间件的API,用于两个程序之间,或分布式系统中发送消息,进行异步通信。

      JMS包括队列与主题两种模式,一种是点对点的Queue,还有一个是发布订阅的Topic方式。区别在于:
      (1)对于Queue模式,一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者A,B那就是A,B总共会收到10条消息,不重复。
      (2)对于Topic模式,一个发布者发布消息,有两个接收者A,B来订阅,那么发布了10条消息,A,B各收到10条消息。

    2.消息中间件

      消息中间件有很多的用途和优点:
      (1) 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外一个模块;
      (2)负责建立网络通信的通道,进行数据的可靠传送;
      (3)保证数据不重发,不丢失 ;
      (4)能够实现跨平台操作,能够为不同操作系统上的软件集成技工数据传送服务。

    3.ActiveMQ

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

    4.ActiveMQ安装

      (1)官方网址:http://activemq.apache.org/,下载对应的程序,如下图所示。

      

      (2)解压到本地,在apache-activemq-5.15.0inwin64的目录下选择InstallService.bat启动服务,这样下次只要到系统服务里去启动与关闭,如下图所示。

      

      (3)至此,activemq的服务已经启动。

    5.Demo项目结构

    6.代码实现生产者消费者模式

      (1)配置依赖项

        在pom.xml里添加依赖jar包

       <dependencies>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-all</artifactId>
                <version>5.15.0</version>
            </dependency>
       </dependencies>

      (2)实现生产者(队列模式)

    package com.snail.queue;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import javax.jms.*;
    
    /**
     * 生产者(队列模式)
     * Create by zhangviv
     * 2017-08-25 14:06
     **/
    public class AppProducer {
        private static final String url = "tcp://localhost:61616";
        private static final String queueName = "queue-test";
    
        public static void main(String[] args) throws JMSException {
            //1.创建ConnectionFactory
            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.创建一个生产者
            MessageProducer producer = session.createProducer(destination);
    
            for (int i = 0; i < 100; i++) {
                //7.创建消息
                TextMessage textMessage = session.createTextMessage("test" + i);
                producer.send(textMessage);
                System.out.println("发送消息:" + textMessage.getText());
            }
    
            //8.关闭连接
            connection.close();
        }
    }

      (3)实现消费者(队列模式)

    package com.snail.queue;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import javax.jms.*;
    
    /**
     *  消费者(队列模式)
     * Create by zhangviv
     * 2017-08-25 14:12
     **/
    public class AppConsumer {
        private static final String url="tcp://localhost:61616";
        private  static final String queueName="queue-test";
        public static void main(String[] args) throws JMSException {
            //1.创建ConnectionFactory
            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();
                    }
                }
            });
    
        }
    }

      (4)ActiveMQ客户端查看队列模式

      

      (5)实现生产者(主题模式)

    package com.snail.topic;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import javax.jms.*;
    
    
    /**
     * 生产者(主题模式)
     * Create by zhangviv
     * 2017-08-25 14:06
     **/
    public class TopicProducer {
        private static final String url = "tcp://localhost:61616";
        private static final String topicName = "topic-test";
    
        public static void main(String[] args) throws JMSException {
            //1.创建ConnectionFactory
            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(topicName);
    
            //6.创建一个生产者
            MessageProducer producer = session.createProducer(destination);
    
            for (int i = 0; i < 100; i++) {
                //7.创建消息
                TextMessage textMessage = session.createTextMessage("test" + i);
                producer.send(textMessage);
                System.out.println("发送消息:" + textMessage.getText());
            }
    
            //8.关闭连接
            connection.close();
        }
    }

      (6)实现消费者模式(主题模式)

    package com.snail.topic;
    import org.apache.activemq.ActiveMQConnectionFactory;
    import javax.jms.*;
    
    /**
     *  消费者(主题模式)
     * Create by zhangviv
     * 2017-08-25 14:12
     **/
    public class TopicConsumer {
        private static final String url="tcp://localhost:61616";
        private  static final String topicName="topic-test";
        public static void main(String[] args) throws JMSException {
            //1.创建ConnectionFactory
            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(topicName);
    
            //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();
                    }
                }
            });
            
        }
    }

      (7)ActiveMQ客户端查看主题模式

      

  • 相关阅读:
    高德地图js开发,给城市某个区添加颜色
    threejs 实现易拉罐换肤功能
    React 跨页面保留前一页状态的一种实现方法
    nginx 解决客户端跟服务跨域问题
    React图片预览组件,支持缩放、旋转、上一张下一张功能
    h5 高德地图开发 谷歌浏览器定位失败解决方案
    echarts点击省份显示对应的省份
    sec:authorize 标签 通过不通过权限例子
    择左边多选框的值移动到右边多选框
    更改css element.style
  • 原文地址:https://www.cnblogs.com/TechSnail/p/7442530.html
Copyright © 2020-2023  润新知