您的位置:首页 > 其它

ActiveMQ的简单使用

2017-02-21 15:16 483 查看
简单的搭建一个ActiveMQ的学习Demo

参考:消息队列之异步消息的基本概念以及ActiveMQ整合Spring的常用用法介绍

本篇主要内容:

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管理界面



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

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、测试。

先运行消息生产者。



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

运行消息消费者



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

再次查看web-queues页面。



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

再启动一个消息消费者



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

再次启动消息生产者



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

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



主题(topic)

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

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

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


改为

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


查看web-topics,如下:



启动2个消费者,然后启动生产者

查看web-topics,如下:





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

现在我们基本完成简单的使用ActiveMQ了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  activemq