ActiveMQ --- 入门

JMS简介:http://blog.csdn.net/ka_ka314/article/details/79572214

 

一、ActiveMQ概述

ActiveMQ是一种开源的,实现了JMS规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。

 

ActiveMQ官网:http://activemq.apache.org/

 

二、ActiveMQ下载安装 --- Linux环境

2.1、下载

ActiveMQ下载地址:http://activemq.apache.org/download-archives.html

 

2.2、安装

(1) 将下载的安装包上传至Linux服务器

 

(2) 解压安装包

 

tar  zxvf  apache-activemq-xx.xx.xx-bin.tar.gz

 

 

解压后的目录如下:

 

  • bin --- 存放的是脚本文件
  • conf --- 存放的是基本配置文件
  • data --- 存放的是日志文件
  • docs --- 存放的是说明文档
  • examples --- 存放的是简单的实例
  • lib --- 存放的是activemq所需jar包
  • webapps --- 用于存放项目的目录

 


(3) 为ActiveMQ授权 --- VM中

安装目录授权

 

chmod 777 apache-activemq-xx.xx.xx


进入bin目录,为activemq授权

 

 

chmod 755 activemq 


注意:Linux授权三个数字的含义:

 

 

  • 第一个数字表示文件所有者的权限
  • 第二个数字表示与文件所有者同属一个用户组的其他用户的权限
  • 第三个数字表示其它用户组的权限。

 

 

2.3、启动与停止

(1) 启动:

 

./activemq start


出现如下内容表示启动成功:

 

 

(2) 查看启动状态:

 

./activemq status

 

 

 

 

(3) 停止:

 

./activemq stop


2.4、ActiveMQ管理页面

 

(1) 启动完成后,可以访问ActiveMQ管理页面

 

http://192.168.25.130:8161/ 


 

 

 

 

(2) 点击Manage ActiveMQ broker进入管理页面,默认用户名/密码:admin/admin

 

(3) 点击Queues可以查看队列信息

Number Of Pending Messages --- 等待消费的消息 这个是当前未出队列的数量。
Number Of Consumers --- 消费者 这个是消费者端的消费者数量
Messages Enqueued --- 进入队列的消息  进入队列的总数量,包括出队列的。
Messages Dequeued --- 出了队列的消息  可以理解为是消费这消费掉的数量。

 

三、ActiveMQ快速入门

3.1 点对点模式 --- PTP

点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接收端是否正在接收,可以直接向ActiveMQ发送消息,发送的消息,将会先进入队列中,如果有接收端在监听,则会发向接收端,如果没有接收端接收,则会保存在activemq服务器,直到接收端接收消息,点对点的消息模式可以有多个发送端,多个接收端,但是一条消息,只会被一个接收端给接收到,哪个接收端先连上ActiveMQ,则会先接收到,而后来的接收端则接收不到那条消息。

 

(1) Manven pom.xml配置,引入依赖

 

dependencies>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-client</artifactId>
            <version>5.13.4</version>
        </dependency>
    </dependencies>


(2) QueueProducer消息生成者

 

 

package cn.mq.activeMQ.demo;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class QueueProducer {

    public static void main(String[] args) throws JMSException {

        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.130:61616");

        //2.获取连接
        Connection connection = connectionFactory.createConnection();

        //3.启动连接
        connection.start();

        //4.获取session
        //      参数1:是否启动事务,
        //      参数2:消息确认模式
        //          AUTO_ACKNOWLEDGE = 1    自动确认
        //          CLIENT_ACKNOWLEDGE = 2    客户端手动确认
        //          DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
        //          SESSION_TRANSACTED = 0    事务提交并确认
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //5.创建队列对象
        Queue queue = session.createQueue("test-queue");

        //6.创建消息生产者
        MessageProducer producer = session.createProducer(queue);

        //7.创建消息
        TextMessage textMessage = session.createTextMessage("ActiveMQ Queue Message");

        //8.发送消息
        producer.send(textMessage);

        //9.关闭资源
        producer.close();
        session.close();
        connection.close();

    }
}


(3) QueueConsumer消息消费者

 

 

package cn.mq.activeMQ.demo;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;

public class QueueConsumer {

    public static void main(String[] args) throws JMSException, IOException {
        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.130:61616");

        //2.获取连接
        Connection connection = connectionFactory.createConnection();

        //3.启动连接
        connection.start();

        //4.获取session
        //      参数1:是否启动事务,
        //      参数2:消息确认模式
        //          AUTO_ACKNOWLEDGE = 1    自动确认
        //          CLIENT_ACKNOWLEDGE = 2    客户端手动确认
        //          DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
        //          SESSION_TRANSACTED = 0    事务提交并确认
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //5.创建队列对象
        Queue queue = session.createQueue("test-queue");

        //6.创建消息消费
        MessageConsumer consumer = session.createConsumer(queue);

        //7.监听消息
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage textMessage=(TextMessage)message;
                try {
                    System.out.println("接收到消息:"+textMessage.getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        //8.等待键盘输入 --- 长连接
        System.in.read();

        //9.关闭资源
        consumer.close();
        session.close();
        connection.close();

    }
}


3.2 订阅模式 --- pub/sub
订阅/发布模式,同样可以有着多个发送端与多个接收端,但是接收端与发送端存在时间上的依赖,就是如果发送端发送消息的时候,接收端并没有监听消息,那么ActiveMQ将不会保存消息,将会认为消息已经发送,换一种说法,就是发送端发送消息的时候,接收端不在线,是接收不到消息的,哪怕以后监听消息,同样也是接收不到的。这个模式还有一个特点,那就是,发送端发送的消息,将会被所有的接收端给接收到,不类似点对点,一条消息只会被一个接收端给接收到。

 

 

 

 

 

(1) Manven pom.xml配置,引入依赖

 

dependencies>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-client</artifactId>
            <version>5.13.4</version>
        </dependency>
    </dependencies>


(2) TopicProducer消息生成者

 

package cn.mq.activeMQ.demo;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class TopicProducer {

    public static void main(String[] args) throws JMSException {

        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.130:61616");
        //2.获取连接
        Connection connection = connectionFactory.createConnection();
        //3.启动连接
        connection.start();
        //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5.创建主题对象
        Topic topic = session.createTopic("test-topic");
        //6.创建消息生产者
        MessageProducer producer = session.createProducer(topic);
        //7.创建消息
        TextMessage textMessage = session.createTextMessage("ActiveMQ Topic Message");
        //8.发送消息
        producer.send(textMessage);
        //9.关闭资源
        producer.close();
        session.close();
        connection.close();

    }
}

 

 

(3) TopicConsumer消息消费者

 

 

 

 

package cn.mq.activeMQ.demo;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;

public class TopicConsumer {

    public static void main(String[] args) throws JMSException, IOException {

        //1.创建连接工厂
        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.25.130:61616");
        //2.获取连接
        Connection connection = connectionFactory.createConnection();
        //3.启动连接
        connection.start();
        //4.获取session  (参数1:是否启动事务,参数2:消息确认模式)
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5.创建主题对象
        //Queue queue = session.createQueue("test-queue");
        Topic topic = session.createTopic("test-topic");
        //6.创建消息消费
        MessageConsumer consumer = session.createConsumer(topic);

        //7.监听消息
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage textMessage=(TextMessage)message;
                try {
                    System.out.println("接收到消息:"+textMessage.getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        //8.等待键盘输入
        System.in.read();
        //9.关闭资源
        consumer.close();
        session.close();
        connection.close();

    }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值