ActiveMQ使用

一、简介

官网: http://activemq.apache.org/index.html

下载列表  : http://archive.apache.org/dist/activemq/

Apache ActiveMQ™ is the most popular open source, multi-protocol, Java-based messaging server. It supports industry standard protocols so users get the benefits of client choices across a broad range of languages and platforms. Connectivity from C, C++, Python, .Net, and more is available. Integrate your multi-platform applications using the ubiquitous AMQP protocol. Exchange messages between your web applications using STOMP over websockets. Manage your IoT devices using MQTT. Support your existing JMS infrastructure and beyond. ActiveMQ offers the power and flexibility to support any messaging use-case.

There are currently two "flavors" of ActiveMQ available - the "classic" 5.x broker and the "next generation" Artemis broker. Once Artemis reaches a sufficient level of feature parity with the 5.x code-base it will become ActiveMQ 6. Initial migration documentation is available.

Apache ActiveMQ™是最流行的开源,多协议,基于Java的消息服务器。它支持行业标准协议,因此用户可以通过广泛的语言和平台获得客户选择的好处。可以使用C,C ++,Python,.Net等连接。使用无处不在的AMQP协议集成您的多平台应用程序。使用STOMP通过websockets 在Web应用程序之间交换消息。使用MQTT管理您的IoT设备。支持您现有的JMS基础架构及其他。ActiveMQ提供强大的功能和灵活性,以支持任何消息传递用例。

二、安装

(1)解压

wget http://archive.apache.org/dist/activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz


(2)解压

tar -zxvf apache-activemq-5.15.9-bin.tar.gz -C /opt/apps/

(3)启动

./activemq start

(4)访问http://ip:8161/admin/

http://39.97.176.160:8161/admin/

默认账号与密码admin/admin

三、API使用

   MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,RocketMQ、kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 
特点: 

  • 支持多种语言编写客户端 
  • 对spring的支持,很容易和spring整合 
  • 支持多种传输协议:TCP,SSL,NIO,UDP等 
  • 支持AJAX 

消息形式: 

  • 点对点(queue) 
  • 一对多(topic) 

(1)创建一个maven项目

(2)依赖

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all -->
	<dependency>
		<groupId>org.apache.activemq</groupId>
		<artifactId>activemq-all</artifactId>
		<version>5.15.10</version>
	</dependency>
</dependencies>

(2)ActiveMQ测试queue

消费者

package com.mq;


import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class ComsumerQueue {

    public static void testMQConsumerQueue() throws Exception {
        //1、创建工厂连接对象,需要制定ip和端口号
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://39.97.176.160:61616");
        //2、使用连接工厂创建一个连接对象
        Connection connection = connectionFactory.createConnection();
        //3、开启连接
        connection.start();
        //4、使用连接对象创建会话(session)对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5、使用会话对象创建目标对象,包含queue和topic(一对一和一对多)
        Queue queue = session.createQueue("test-queue");
        //6、使用会话对象创建生产者对象
        MessageConsumer consumer = session.createConsumer(queue);
        //7、向consumer对象中设置一个messageListener对象,用来接收消息
        consumer.setMessageListener(new MessageListener() {

            public void onMessage(Message message) {
                // TODO Auto-generated method stub
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) message;
                    try {
                        System.out.println(textMessage.getText());
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        });
        //8、程序等待接收用户消息
        System.in.read();
        //9、关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

    public static void main(String[] args) {

        try {
            testMQConsumerQueue();
        } catch (Exception e) {
            System.out.println(e);
        }

    }
}

生产者

package com.mq;


import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class ProducerQueue {

    public static void testMQProducerQueue() throws Exception {
        //1、创建工厂连接对象,需要制定ip和端口号
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://39.97.176.160:61616");
        //2、使用连接工厂创建一个连接对象
        Connection connection = connectionFactory.createConnection();
        //3、开启连接
        connection.start();
        //4、使用连接对象创建会话(session)对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5、使用会话对象创建目标对象,包含queue和topic(一对一和一对多)
        Queue queue = session.createQueue("test-queue");
        //6、使用会话对象创建生产者对象
        MessageProducer producer = session.createProducer(queue);
        //7、使用会话对象创建一个消息对象
        TextMessage textMessage = session.createTextMessage("hello!test-queue");
        //8、发送消息
        producer.send(textMessage);
        //9、关闭资源
        producer.close();
        session.close();
        connection.close();
    }


    public static void main(String[] args) {

        try {
            testMQProducerQueue();
        } catch (Exception e) {
            System.out.println(e);
        }

    }
}

运行生成者以后,队列里已经有一条消息了,但没有发送出去:

è¿éåå¾çæè¿°

然后消费者,可以看到消息已经发出了: 

è¿éåå¾çæè¿°

(2)ActiveMQ测试Topic

消费者

package com.mq;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class TopicComsumer {

    public static void testTopicConsumer() throws Exception {
        //1、创建工厂连接对象,需要制定ip和端口号
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://39.97.176.160:61616");
        //2、使用连接工厂创建一个连接对象
        Connection connection = connectionFactory.createConnection();
        //3、开启连接
        connection.start();
        //4、使用连接对象创建会话(session)对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5、使用会话对象创建目标对象,包含queue和topic(一对一和一对多)
        Topic topic = session.createTopic("test-topic");
        //6、使用会话对象创建生产者对象
        MessageConsumer consumer = session.createConsumer(topic);
        //7、向consumer对象中设置一个messageListener对象,用来接收消息


        consumer.setMessageListener(new MessageListener() {

            public void onMessage(Message message) {
                // TODO Auto-generated method stub
                if (message instanceof TextMessage) {
                    TextMessage textMessage = (TextMessage) message;
                    try {
                        System.out.println(textMessage.getText());
                    } catch (JMSException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        });
        //8、程序等待接收用户消息
        System.in.read();
        //9、关闭资源
        consumer.close();
        session.close();
        connection.close();
    }

    public static void main(String[] args) {
        try {
            testTopicConsumer();
        } catch (Exception e) {

        }

    }
}

生产者

package com.mq;

import javax.jms.*;

public class TopicProducer {
    public static void testTopicProducer() throws Exception {
        //1、创建工厂连接对象,需要制定ip和端口号
        ConnectionFactory connectionFactory = new org.apache.activemq.ActiveMQConnectionFactory("tcp://39.97.176.160:61616");
        //2、使用连接工厂创建一个连接对象
        Connection connection = connectionFactory.createConnection();
        //3、开启连接
        connection.start();
        //4、使用连接对象创建会话(session)对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5、使用会话对象创建目标对象,包含queue和topic(一对一和一对多)
        Topic topic = session.createTopic("test-topic");
        //6、使用会话对象创建生产者对象
        MessageProducer producer = session.createProducer(topic);
        //7、使用会话对象创建一个消息对象
        TextMessage textMessage = session.createTextMessage("hello!test-topic");
        //8、发送消息
        producer.send(textMessage);
        //9、关闭资源
        producer.close();
        session.close();
        connection.close();
    }

    public static void main(String[] args) {
        try {
            testTopicProducer();
        } catch (Exception e) {

        }

    }
}

运行topic生产者

è¿éåå¾çæè¿°

以看到消息已经发送出去。再运行topic消费者

è¿éåå¾çæè¿°

可以看到有了一个消费者,但是没有接收的消息,这是因为正常情况下我们的topic消息不会再服务器持久化,所以要先打开消费者,再打开生产者,这个时候我们再运行生产者发送一条消息看到消息已经接收到了

è¿éåå¾çæè¿°

 

Spring boot项目中使用  https://blog.csdn.net/weixin_42633131/article/details/83268829

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2014Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值