ActiveMQ入门案例


目录

大家好我是爱学习的张三,今天我们来简单的学习一下ActiveMQ消息队列


首先来啰嗦一下activemq是什么东西

ActiveMQ是Apache出品,最流行的,能力最强劲的开源消息总线,是一个完全支持JMS和J2EE规范的JMS Provider实现

可以说ActiveMQ是在业界应用最广泛,当然想要有更强大的性能和海量数据处理能力,ActiveMQ还需不断的升级,很多业务ActiveM都能满足我们的业务需求,如天猫,淘宝等等  另外ActiveMQ也是RocketMQ的核心  后续我也会将一下RocketMQ,请密切关注小三的博客.

说完了ActiveMQ的简单讲解,那就要说一下JMS了,给各位不知道的小伙伴们扫扫盲,  JMS是实现了JMS接口的消息中间件,那么我们就来看看JMS中的一些关键词,帮助我们更好的学习ActiveMQ,因为ActiveMQ也是实现了JMS规范的消息中间件

Provider(MessageProvider):生产者

Consumer(MessageConsumer):消费者

PTP: Point to Point 即点对点的消息模型

Pub/Sub: Publish/Subscribe , 即发布/订阅的消息模型

Queue:队列目标

Topic:主题目标

ConnectionFactory:  连接工厂,JMS用它创建链接

Connection : JMS 客户端链接到JMS Provider的链接

Sestination: 消息的目的地;

Session:回话,一个发送或者接收消息的线程

步骤一:安装ActiveMQ   小伙伴们可以在官网下载即可  如图

步骤二:启动apache-activemq-5.11.1\bin\win64\activemq.bat  这是Windows下的启动  看到下图就是启动成功,可以在浏览器上输入http://127.0.0.1:8161/admin 查看是否启动成功   默认用户名和密码都是admin  默认端口是8161  可以在conf下的配置文件中修改

3:生产者代码

// 1 建立ConnectionFactory工厂对象 需要输入用户名 密码 以及连接的地址 具使用默认即可 默认的端口为
        // tcp://localhost:61616
        /*ConnectionFactory connFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");*/

//这是加了权限配置  默认使用上面的ConnectionFactory  权限配置看文章最后说明
        ConnectionFactory connFactory = new ActiveMQConnectionFactory("lingjian",
        "lingjian", "tcp://localhost:61616");
        
        // 第二部 通过connectionFactory 建立一个connection连接 并且调用connection
        // 的start()方法开启连接,connection默认是关闭的

        Connection conn = connFactory.createConnection();

        conn.start();

        // 第三部 通过connection 建立session对象 用于接受消息 参数配置1用于是否开启事物 参数二为签收模式
        // 一般我们设置为自动签收

        //Session session = conn.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
        //使用事物
        //Session session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
        //使用Client主动签收的方式
        Session session = conn.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);

        // 第四部 通过session创建 Destination对象 指的是一个客户端用来指定生产消息目标和消费者目标来源的对象 在PTP模式中
        // Destination被称之为QUEUE 在top模式中

        Destination disDestination = session.createQueue("myqueue"); // 参数为queue的名称
                                                                        // 自定义名字

        // 第五部 我们需要通过Session对象来创建消息的发送者和接受者MessageProducer/MessageConsumer

        MessageProducer mp = session.createProducer(disDestination);

        // 第六步 我们可以使用MessageProducer 的setDeliveryMode() 设置持久化和非持久化 特性
        // (DeliverMode) 稍后详解

        mp.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

        // 第七步 最后我们使用JMS规范 的TextMessage形式创建数据(通过ssession对象创建)并用MessageProducer
        // 的send方法发送数据 同理客户端使用

        TextMessage createTextMessage = session.createTextMessage();
        for (int a = 0; a < 5; a++) {
            System.out.println("我是发送的消息内容....id为" + a + "....");
            createTextMessage.setText("我是发送的消息内容....id为" + a + "....");
            mp.send(createTextMessage);
        }
        
        //事物提交需要commit
        session.commit();
        
        if (conn != null) {
            conn.close();
        }

消费者代码:

public class Receiver {
    public static void main(String[] args) throws Exception {
        // 1 建立ConnectionFactory工厂对象 需要输入用户名 密码 以及连接的地址 具使用默认即可 默认的端口为
        // tcp://localhost:61616
        //ConnectionFactory connFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
        //        ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");
        ConnectionFactory connFactory = new ActiveMQConnectionFactory("lingjian",
                "lingjian", "tcp://localhost:61616");
        // 第二部 通过connectionFactory 建立一个connection连接 并且调用connection
        // 的start()方法开启连接,connection默认是关闭的

        Connection conn = connFactory.createConnection();

        conn.start();

        // 第三部 通过connection 建立session对象 用于接受消息 参数配置1用于是否开启事物 参数二为签收模式
        // 一般我们设置为自动签收

        Session session = conn.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);

        // 第四部 通过session创建 Destination对象 指的是一个客户端用来指定生产消息目标和消费者目标来源的对象 在PTP模式中
        // Destination被称之为QUEUE 在top模式中

        Destination disDestination = session.createQueue("myqueue"); // 参数为queue的名称
                                                                        // 自定义名字

        // 第五部 我们需要通过Session对象来创建消息的发送者和接受者MessageProducer/MessageConsumer

        // MessageProducer mp = session.createProducer(disDestination);
        MessageConsumer createConsumer = session.createConsumer(disDestination);

        while (true) {
            TextMessage receive = (TextMessage) createConsumer.receive();
            //如果设置了手动签收  消息  则需要设置   另起一个线程  tcp  通知activemq确认签收
            receive.acknowledge();
            if (receive == null)
                break;

            System.out.println("接收到的内容为:"+receive.getText());
        }

        if (conn != null) {
            conn.close();
        }
    }
}

说明:所有包都是JMS下面的包  可以把ActiveMQ目录下的activemq-all-xxx.jar导入项目

权限配置 在conf/activemq.xml中插入以下信息

<plugins>
            <simpleAuthenticationPlugin>
                <users>
                    <authenticationUser username="lingjian" password="lingjian" groups="users,admins"/>
                </users>
            </simpleAuthenticationPlugin>
        </plugins>

然后跑一下生产者和消费者就行了 一个简单的ActiveMQ就实现了  如果想要复杂使用的话,关于JMS中的生产者和消费者参数可以详细了解一下,比如能配置队列消息存活时间,消费优先级,消费模式,等等 小伙伴们就自己深入研究了,我是爱学习的张三,欢迎大家一起讨论学习

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值