ActiveMQ安装与使用

目录

一、为什么要使用消息中间件ActiveMQ

二、activemq的安装与使用

三、ptp(点对点模式)

1.创建一个消息生产者,并发送消息到ActiveMQ.

2.创建一个消息消费者,从ActiveMQ获取消息

四、发布/订阅(topic)

1、创建一个消息生产者,并发送消息到ActiveMQ topic

2、创建两个消费者

五、修改activeMQ默认的端口号


一、为什么要使用消息中间件ActiveMQ

原因有以下三点:

1、解耦

2、异步请求

3、流量削峰

二、activemq的安装与使用

请参见: https://www.cnblogs.com/jaycekon/p/6225058.html

说明:activemq有两种模式:ptp(queue消息队列)、发布/订阅(topic主题)

现在分别记录这两张模式的用法:

准备:创建一个springboot项目,添加activemq的maven依赖:

<!--activemq消息中间件依赖-->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.15.5</version>
        </dependency>

三、ptp(点对点模式)

1.创建一个消息生产者,并发送消息到ActiveMQ.

package com.jiangcx.activemq1.provider;


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

import javax.jms.*;

public class ActiveProvider {
    public static void main(String[] args) throws Exception{
        // 创建mq的连接工厂 ConnectionFactory,JMS用它来创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://192.168.1.102:61616");

        // 获得一个连接  客户端到JMS provider 的连接
        Connection connection = connectionFactory.createConnection();
        // 开启连接
        connection.start();
        // 创建一个session 参数说明 是否开启事务模式、签收模式
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        // 创建一个名为myQueue的消息队列
        Queue myQueue= session.createQueue("myQueue");
        // 创建消息生产者 MessageProducer
        MessageProducer producer = session.createProducer(myQueue);
        // 设置为不用持久化
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        // 创建一条消息
        TextMessage message = session.createTextMessage("消息内容为:你好activemq");
        //发送消息
        producer.send(message);
        //关闭资源
        producer.close();
        session.close();
        connection.close();
    }
}

运行后访问:http://192.168.1.102:8161/admin,可看到mq中有名为myQuene的消息。

2.创建一个消息消费者,从ActiveMQ获取消息

package com.jiangcx.activemq1.consumer;

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

import javax.jms.*;

public class ActiveConsumer {

    public static void main(String[] args) throws JMSException {
        // 创建mq的连接工厂 ConnectionFactory,JMS用它来创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://192.168.1.102:61616");

        // 获得一个连接  客户端到JMS provider 的连接
        Connection connection = connectionFactory.createConnection();
        // 开启连接
        connection.start();
        // 创建一个session 参数说明 是否开启事务模式、签收模式
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        // 创建一个名为myQueue的消息队列
        Queue myQueue= session.createQueue("myQueue");
        
        // 创建消息消费者
        MessageConsumer consumer = session.createConsumer(myQueue);
        //接收消息
        TextMessage message = (TextMessage) consumer.receive();
        String msg = message.getText();
        System.out.println("消费者接收到的数据为:" + msg);
        //关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}

四、发布/订阅(topic)

用一个生产者,两个消费者进行模拟

1、创建一个消息生产者,并发送消息到ActiveMQ topic

package com.jiangcx.activemq2.provider;


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

import javax.jms.*;

public class ActiveProvider {
    public static void main(String[] args) throws Exception{
        // 创建mq的连接工厂 ConnectionFactory,JMS用它来创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://192.168.1.102:61616");

        // 获得一个连接  客户端到JMS provider 的连接
        Connection connection = connectionFactory.createConnection();
        // 开启连接
        connection.start();
        // 创建一个session 参数说明 是否开启事务模式、签收模式
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        // 创建一个名为myTopic的主题
        Topic myTopic = session.createTopic("myTopic");
        // 创建消息生产者 MessageProducer
        MessageProducer producer = session.createProducer(myTopic);
        // 设置为不用持久化
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        // 创建一条消息
        TextMessage message = session.createTextMessage("消息内容为:你好activemq topic");
        //发送消息
        producer.send(message);
        //关闭资源
        producer.close();
        session.close();
        connection.close();
    }
    
}

2、创建两个消费者

package com.jiangcx.activemq2.consumer;

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

import javax.jms.*;

/**
 * 发布/订阅 模式
 */
public class ActiveConsumer1 {

    public static void main(String[] args) throws JMSException {
        // 创建mq的连接工厂 ConnectionFactory,JMS用它来创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://192.168.1.102:61616");

        // 获得一个连接  客户端到JMS provider 的连接
        Connection connection = connectionFactory.createConnection();
        //持久订阅的时候需要一个id来标识
        connection.setClientID("my_client01");
        // 开启连接
        connection.start();
        // 创建一个session 参数说明 是否开启事务模式、签收模式
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        // 创建一个名为myTopic的主题
        Topic mytopic = session.createTopic("myTopic");

        // 创建消息消费者
        MessageConsumer consumer = session.createConsumer(mytopic);
        //接收消息
        TextMessage message = (TextMessage) consumer.receive();
        String msg = message.getText();
        System.out.println("消费者接收到的数据为:" + msg);
        //关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}
package com.jiangcx.activemq2.consumer;

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

import javax.jms.*;

/**
 * 发布/订阅 模式
 */
public class ActiveConsumer2 {

    public static void main(String[] args) throws JMSException {
        // 创建mq的连接工厂 ConnectionFactory,JMS用它来创建连接
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,
                "tcp://192.168.1.102:61616");

        // 获得一个连接  客户端到JMS provider 的连接
        Connection connection = connectionFactory.createConnection();
        //持久订阅的时候需要一个id来标识
        connection.setClientID("my_client02");
        // 开启连接
        connection.start();
        // 创建一个session 参数说明 是否开启事务模式、签收模式
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        // 创建一个名为myTopic的主题
        Topic mytopic = session.createTopic("myTopic");

        // 创建消息消费者
        MessageConsumer consumer = session.createConsumer(mytopic);
        //接收消息
        TextMessage message = (TextMessage) consumer.receive();
        String msg = message.getText();
        System.out.println("消费者接收到的数据为:" + msg);
        //关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}

五、修改activeMQ默认的端口号

在linux环境下(windows路径类似):

ActiveMQ5.x版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。
访问:http://192.168.1.102:8161/admin/      用户名和密码同为 admin

注:activemq启动后会占用两个端口,一个是负责收发消息的tcp端口:61616,一个是web负责用户界面化管理的端口:8161,这个两个端口分别可以在conf下面的activemq.xml和jetty.xml中找到。

#cd /usr/local/activeMQ/apache-activemq-5.15.9/conf

#vim activemq.xml

 

可以发现,activemq的端口号是配置在jetty.xml中的。于是打开jetty.xml

#vim jetty.xml

默认为8161,在此修改保持后退出,重启即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值