你好,游客 登录 注册 搜索
背景:
阅读新闻

ActiveMQ的简单使用

[日期:2017-03-22] 来源:Linux社区  作者:uq_jin [字体: ]

本篇主要内容:
1、ActiveMQ安装
2、队列(queue)
3、主题(topic)

ActiveMQ安装

1、下载:

http://activemq.apache.org/download.html

选择最新稳定版

选择平台版本

2、安装:
我下载的是windows版本的,解压。然后双击apache-activemq-5.14.3\bin\win64\activemq.bat即可

3、访问:
http://127.0.0.1:8161/admin/ 用户名/密码:admin/admin

队列(queue)

即一个消息只能被一个消费者消费。

1、进入web管理界面

Qeuees

这里看到队列里是没有任何消息的

2、编写消息生产者
第一步,引入jar

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

第二步,编写消息生产者

package queues;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
/**
 * 消息生产者
 */
public class JMSProducer {
    //默认连接用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //默认连接密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);

        try {
            //连接
            Connection connection = connectionFactory.createConnection();
            //启动连接
            connection.start();
            //创建session
            Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
            //消息目的地
            Destination destination = session.createQueue("hello");
            //消息生产者
            MessageProducer producer = session.createProducer(destination);
            //设置不持久化,此处学习,实际根据项目决定
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            //发送消息
            for (int i = 0; i < 10; i++) {
                //创建一条文本消息
                TextMessage message = session.createTextMessage("ActiveMQ:这是第 " + i + " 条消息");
                //生产者发送消息
                producer.send(message);
            }

            session.commit();
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

这里创建了名为“hello”的消息队列,并向消息队列发送10条消息。

第三步,编写消息消费者

package queues;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 消息消费者
 */
public class JMSConsumer {
    //默认连接用户名
    private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    //默认连接密码
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    //默认连接地址
    private static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;

    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);
        try {
            //连接
            Connection connection = connectionFactory.createConnection();
            //启动连接
            connection.start();
            //创建session
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            //消息目的地
            Destination destination = session.createQueue("hello");
            //消息消费者
            MessageConsumer consumer = session.createConsumer(destination);
            while (true) {
                TextMessage message = (TextMessage) consumer.receive();
                if (message != null) {
                    System.out.println("接收到消息: " + message.getText());
                } else {
                    break;
                }
            }
            session.close();
            connection.close();
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

这里指向名为“hello”的消息队列,并向消息队列一直取消息出来。

3、测试。

先运行消息生产者。
queues

发现比之前多了一个名为hello的消息队列,并有10条消息进入队列了。

运行消息消费者

消息消费者打印的消息

发现消费者消费了之前发的10个消息。

再次查看web-queues页面。

queues

发现比之前多了一个消费者,而且有10条消息出队列了。

再启动一个消息消费者

2个消费者

发现控制台没打印,说明队列里的消息已经被消费完了。

再次启动消息生产者

1.gif

发现2个消费者各消费5条消息,说明队列里的消息只容许被一个消费者消费。

此时,web-queues页面应该是有2个消费者,共生成和消费20条消息。

queues

主题(topic)

即一个消息可以被多个消费者接收

只需要将队列中的如下代码

//消息目的地
Destination destination = session.createQueue("hello");

改为

//消息目的地
Destination destination = session.createTopic("hello");

查看web-topics,如下:

topics

启动2个消费者,然后启动生产者
查看web-topics,如下:

topics

消费者打印消息.gif

发现2个消费者都消费了这10条消息。

现在我们基本完成简单的使用ActiveMQ了。

推荐阅读:

Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 http://www.linuxidc.com/Linux/2015-12/126163.htm

Spring下ActiveMQ实战  http://www.linuxidc.com/Linux/2015-11/124854.htm

Java消息队列--ActiveMQ 实战 http://www.linuxidc.com/Linux/2016-12/138848.htm

CentOS 6.5启动ActiveMQ报错解决 http://www.linuxidc.com/Linux/2015-08/120898.htm

ActiveMQ部署步骤和后台管理网站Service Unavailable问题解决  http://www.linuxidc.com/Linux/2016-11/137050.htm

Linux环境下面ActiveMQ端口号设置和WEB端口号设置 http://www.linuxidc.com/Linux/2012-01/51100.htm

ActiveMQ 的详细介绍请点这里
ActiveMQ 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-03/142053.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款