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

activemq Active Consumer页面 activemq怎么用_activemq


若开启两个消费者,则可以看到它们接收的消息分别是所有消息的一半,没有重复消息



主题模式的消息演示


代码只有很小的改动


private static final String topicName="topic-test";
//5.创建一个目标
        Destination destination=session.createTopic(topicName);



测试看出,只有消费者先开启监听,生产者再生产消息,才能接收到消息,而且若开启多个消费者他们接收到的消息都是所有消息