消息队列ActiveMQ的安装与使用

原创 2017年07月19日 16:32:57

(一)介绍

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。
本文主要讲ActiveMQ的安装与简单使用。

(二)安装与启动

首先摆上ActiveMQ官网的安装启动文档http://activemq.apache.org/getting-started.html
我使用的mq是5.15.0版本,系统是centos7.3(某**云服务器最低配)。
官网教程中给的连接竟然404了,于是手动在官网下载linux版本的在上传到服务器;然后解压到某个目录下(我是解压到/opt目录下了),接着
cd /opt/apache-activemq-5.15.0/bin/
执行./activemq start
命令就启动ActiveMQ了

(三)Java客户端使用

在mq下载的压缩包里有有一个jar包activemq-all-5.15.0.jar,将个jar包加载到项目中即可。ActiveMQ符合JMS(Java Message Service)规范,其主要提供了两种服务,一种是点对点的消息传输(queue),一种是一对多的消息传输(topic)下面将给出这两种方式的生产者和消费者代码示例。

(3.1)点对点

/**
 * 
 * @author yasin
 * @TODO   Queue producer
 */
public class Producer {

    public static String URL = "tcp://127.0.0.1:61616";//mq服务地址,自己的公网ip就不暴露了

    public static void main(String[] args) {

        ConnectionFactory  factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,URL);
        Connection connection = null;
        try {
            connection= factory.createConnection();
            connection.start();

            Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
            Destination destination = session.createQueue("MessageQueue");//创建一个queue,并且命名为MessageQueue,消费方凭借这个名字进行匹配消费
            MessageProducer producer = session.createProducer(destination);

            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//设置消息模式,此处为不持久,就没有消费者订阅,则消息不保存

            ObjectMessage message = session.createObjectMessage("hello everyone");//创建发布的消息

            producer.send(message);

            session.commit();

        } catch (JMSException e) {
            e.printStackTrace();
        }finally{
            if(connection!=null){
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }


    }
}
/**
 * 
 * @author yasin
 * @TODO   Queue consumer
 *
 */
public class Consumer {

    public static String URL = "tcp://127.0.0.1:61616";//mq服务地址

    public static void main(String[] args){
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,URL);
        try {
            Connection connection = connectionFactory.createConnection();
            connection.start();
            Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
            Destination destination = session.createQueue("MessageQueue");
            MessageConsumer consumer = session.createConsumer(destination);

            while(true){

                ObjectMessage message = (ObjectMessage) consumer.receive(10000);
                if(message!=null){
                    String messageContent = (String) message.getObject();
                    System.out.println(messageContent);
                }else{
                    break;
                }


            }



        } catch (JMSException e) {
            e.printStackTrace();
        }

    }




}

(3.2)一对多(topic)

/**
 * 
 * @author yasin
 * @TODO   Topic Producer
 */
public class Producer {

    public static String URL = "tcp://127.0.0.1:61616";//mq服务地址

    public static void main(String[] args){

        ConnectionFactory factory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                URL);

        try {
            Connection connection = factory.createConnection();
            connection.start();
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Topic topic = session.createTopic("MessageTopic");

            MessageProducer producer = session.createProducer(topic);
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            TextMessage  message = session.createTextMessage();
            message.setText("message_hello_yasin");
            producer.send(message);


        } catch (JMSException e) {
            e.printStackTrace();
        }


    }


}
/**
 * 
 * @author yasin
 * @TODO   Topic consumer
 *
 */
public class Consumer {

    public static String URL = "tcp://127.0.0.1:61616";//mq服务地址

    public static void main(String[] args){

        ConnectionFactory factory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,
                ActiveMQConnection.DEFAULT_PASSWORD,
                URL
                );

        try {
            Connection connection = factory.createConnection();
            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Topic topic = session.createTopic("MessageTopic");

            MessageConsumer consumer = session.createConsumer(topic);
            consumer.setMessageListener(new MessageListener() {

                public void onMessage(Message msg) {

                    TextMessage tm = (TextMessage) msg;
                    try {
                        System.out.println(tm.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }

                }
            });

            MessageConsumer consumer1 = session.createConsumer(topic);//第二个消费者
            consumer1.setMessageListener(new MessageListener() {

                public void onMessage(Message msg) {

                    TextMessage tm = (TextMessage) msg;
                    try {
                        System.out.println("1::"+tm.getText());
                    } catch (JMSException e) {
                        e.printStackTrace();
                    }

                }
            });


        } catch (JMSException e) {
            e.printStackTrace();
        }



    }

}

(四)activemq数据的显示

activemq内置了数据监控系统,是运行在Jetty上的网页,可通过浏览器直接访问,地址 ip:8161/admin 初始账号密码都是admin
点击导航栏的queues就可查看所有发送的点对点的消息历史及状态,topics是一对多。

本文只是一个简单的安装和使用介绍,在生产环境中还需要更加详细的配置爱以及mq集群的布置,以后会进行更加详细的纪录

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java消息队列ActiveMQ的简单使用

activeMQ 是学习java消息队列的实现项目,使用jfinal + jfinal-ext + activeMQ + quartz快速构建。 1.消息队列 消息队列,其实是一种基于数据结构实现的...
  • shine4j
  • shine4j
  • 2016年08月03日 14:39
  • 1723

ActiveMQ消息队列的集群安装及应用(二)

使用ZooKeeper实现的MasterSlave实现方式, 是对ActiveMQ进行高可用的一种有效的解决方案, 高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broke...

ActiveMQ消息队列的单机使用及应用(一)

JMS消息通常有两种类型: ① 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给 一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。 ② 发布...

Windows平台下的ActiveMQ消息队列的简单使用

1、下载 http://activemq.apache.org/download.html 点击ActiveMQ 5.14.0 Release,进入5.14版本的下载页面,选择Windows 的B...

MSMQ?不,太弱了。使用ActiveMQ实现消息队列服务

关于MSMQ和ActiveMQ的基础功能就不再描述。这里说说ActiveMQ的比较实用的一个功能:ScheduledMessage ScheduledMessage可以理解为一个调度功能,可以延时、重...

ActiveMq C#客户端 消息队列的使用(存和取)

1、准备工具 VS2013Apache.NMS.ActiveMQ-1.7.2-bin.zip apache-activemq-5.14.0-bin.zip 2、开始项目 VS2013...

开源消息队列ActiveMQ使用 .net window

1.ActiveMQ简介 先分析这么一个场景:当我们在网站上购物时,必须经过,下订单、发票创建、付款处理、订单履行、航运等。但是,当用户下单后,立即跳转到“感谢那您的订单” 页面。不仅如此,若果...

activemq 支持mysql持久化 消息队列使用

目前官网上的5.x.x版本都不能下载,故使用4.1.2版本进行测试   下载地址  下载下来的包解压后为绿色版的,除了配置java_home环境变量,其他不需要安装,可以直接启动。  启动命令...
  • lucett
  • lucett
  • 2011年10月17日 15:04
  • 2106

关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,Rabbi...

ActiveMQ 消息队列

  • 2017年01月12日 17:32
  • 435KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:消息队列ActiveMQ的安装与使用
举报原因:
原因补充:

(最多只允许输入30个字)