Windows上安装ActiveMQ:
下载安装包:activemq官网(activemq.apache.org)
找到相应版本的windows压缩包,解压到安装目录
进入bin目录,进入win64目录,右键以管理员运行activemq.bat,运行成功后可以在命令行下面看到"ActiveMQ WebConsole available at http://0.0.0.0:8161/"
在浏览器中访问"127.0.0.1:8161",点击欢迎页面中的"Manage ActiveMQ broker" ,在弹出的身份验证框中输入用户名、密码(都是admin),进入管理界面,命令行窗口不要关闭。
还有另外一种启动方式,同样是在win64目录下,右键运行installService.bat,在系统服务中找到ActiveMQ,左边点击启动服务,可设置自动启动,还是访问"127.0.0.1:8161",点击
"Manage ActiveMQ broker",进入管理界面。
Linux上安装ActiveMQ:
cd进入安装目录,wget +linux平台相应版本的压缩包下载地址,解压文件"tar -zxvf apache-activemq-5.14.2-bin.tar.gz",进入bin目录,启动服务"./activemq start",可以"ps -ef | grep activemq"检查服务是否启动。同样在浏览器中访问"本机IP地址:8161",点击欢迎页面中的"Manage ActiveMQ broker" ,在弹出的身份验证框中输入用户名、密码(都是admin),进入管理界面,关闭命令"./activemq stop"。
队列模式的消息演示
我用的开发工具是idea,创建一个Maven工程"jmstest"
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.csdn.jms</groupId>
<artifactId>jms-test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
</dependencies>
</project>
消息生产者AppProducer
//向消息中间件发送消息
public class AppProducer {
//61616是activemq开放的端口
private static final String url="tcp://127.0.0.1:61616";
private static final String queueName="queue-test";
public static void main(String[] args) throws JMSException {
//1.创建connectionfactory
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(url);
//2.创建Connection
Connection connection=connectionFactory.createConnection();
//3.建立连接
connection.start();
//4.创建会话
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //false:是否用事务中心处理,AUTO_ACKNOWLEDGE:自动应答
//5.创建一个目标
Destination destination=session.createQueue(queueName);
//6.创建生产者
MessageProducer producer=session.createProducer(destination);
for(int i=0;i<100;i++){
//7.创建消息
TextMessage textMessage=session.createTextMessage(i+"test");
//8.发送消息
producer.send(textMessage);
System.out.println("发送消息"+textMessage.getText());
}
//9.关闭连接
connection.close();
}
}
消息消费者AppConsumer
public class AppConsumer {
private static final String url="tcp://127.0.0.1:61616";
private static final String queueName="queue-test";
public static void main(String[] args) throws JMSException {
//1.创建connectionfactory
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(url);
//2.创建Connection
Connection connection=connectionFactory.createConnection();
//3.建立连接
connection.start();
//4.创建会话
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //false:是否用事务中心处理,AUTO_ACKNOWLEDGE:自动应答
//5.创建一个目标
Destination destination=session.createQueue(queueName);
//6.创建消息消费者
MessageConsumer messageConsumer=session.createConsumer(destination);
//7.创建一个监听器
messageConsumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage= (TextMessage) message;
try {
System.out.println("接收到消息"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//8.关闭连接
//connection.close();
}
}
依次运行生产者、消费者程序,查看ActiveMQ管理界面
若开启两个消费者,则可以看到它们接收的消息分别是所有消息的一半,没有重复消息
主题模式的消息演示
代码只有很小的改动
private static final String topicName="topic-test";
//5.创建一个目标
Destination destination=session.createTopic(topicName);
测试看出,只有消费者先开启监听,生产者再生产消息,才能接收到消息,而且若开启多个消费者他们接收到的消息都是所有消息