关闭

消息队列ActiveMQ的安装与使用

标签: activemq中间件
301人阅读 评论(0) 收藏 举报
分类:

(一)介绍

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队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集群的布置,以后会进行更加详细的纪录

0
0
查看评论

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

使用ZooKeeper实现的MasterSlave实现方式, 是对ActiveMQ进行高可用的一种有效的解决方案, 高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务( 也就是Master节点) ,其他的Broker处于...
  • JavaWebRookie
  • JavaWebRookie
  • 2017-04-06 17:33
  • 857

消息队列入门(四)ActiveMQ的应用实例

消息队列入门(四)ActiveMQ的应用实例 >>部署和启动ActiveMQ 去官网下载:http://activemq.apache.org/ 我下载的是apache-activemq-5.12.0-bin.tar.gz, 解压到本地目录,进入到bin路径下, 运行activem...
  • yangliuhbhd
  • yangliuhbhd
  • 2016-09-05 20:25
  • 1057

zookeeper+activemq实现高可用消息队列

使用ZooKeeper实现的Master-Slave实现方式,是对ActiveMQ进行高可用的一种有效的解决方案,高可用的原理:使用ZooKeeper(集群)注册所有的ActiveMQ Broker。只有其中的一个Broker可以对外提供服务(也就是Master节点),其他的Broker处于待机状态...
  • sunqingzhong44
  • sunqingzhong44
  • 2017-05-11 12:46
  • 756

使用ActiveMQ进行C++与C#的通信5 - 实现C++和C#的通信

在前几篇文章分别实现C#、C++连接ActiveMQ的基础上,本文介绍如何使它们通信。
  • pigautumn
  • pigautumn
  • 2017-08-07 18:07
  • 258

PHP中使用ActiveMQ实现消息队列

前面我们已经学了如何部署ActiveMQ, 我们知道通过ActiveMQ的一个管理后台可以查看任务队列。今天 用PHP来操作ActiveMQ,我们可以借助一个第三方扩展。 下载:composer require fusesource/stomp-php:2.0.*然后新建test.php:&l...
  • github_26672553
  • github_26672553
  • 2017-03-14 16:28
  • 5581

java消息队列ActiveMQ的简单使用

activeMQ是学习java消息队列的实现项目,使用jfinal + jfinal-ext + activeMQ + quartz快速构建。 1.消息队列消息队列,其实是一种基于数据结构实现的服务。而java语言中的实现,有apache的activeMQ,比较主流。 2.环境搭建首先去apache...
  • mg0324
  • mg0324
  • 2015-11-05 18:39
  • 6097

深入浅出 消息队列 ActiveMQ

一、 概述与介绍 ActiveMQ 是Apache出品,最流行的、功能强大的即时通讯和集成模式的开源服务器。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。提供客户端支持跨语言和协议,带有易于在充分支持JMS 1.1和1.4使用J2...
  • jwdstef
  • jwdstef
  • 2013-12-17 17:25
  • 63085

消息队列-ActiveMQ学习笔记(二)-点对点消息实现

创建java项目,并导入jar包,activemq-all.jar包含了其全部的jar包 消息提供者代码: package com.feiyang.activemq; import javax.jms.Connection; import javax.jms.ConnectionFacto...
  • qq_26504875
  • qq_26504875
  • 2016-07-01 15:42
  • 1275

ActiveMQ安装配置和使用简例

本文作者:Zhang Phil 原文链接: ActiveMQ安装配置和使用简例 ActiveMQ是一套JMS(Java Message Service)开源消息服务实现的组件。以Windows操作系统为例,本文简述了ActiveMQ的安装配置和使用简例。消息服务是互联网应用的最基本功能,只要是互...
  • zhangphil
  • zhangphil
  • 2015-09-02 08:49
  • 7790

MQ比较,kafka消息队列

目前业界有很多MQ产品,我们作如下对比: RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给...
  • lb7758zx
  • lb7758zx
  • 2016-05-24 10:30
  • 2415
    个人资料
    • 访问:75007次
    • 积分:1326
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:1篇
    • 译文:0篇
    • 评论:31条