ActiveMQ入门篇

微信公众号:Java患者

ActiveMQ 简介

ActiveMQ是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件,通过中间件我们可以实现异步调用、流量削峰等。

ActiveMQ安装

1) 将 apache-activemq-5.15.11-bin.tar.gz 上传到服务器

2) 解压 tar -zxvf apache-activemq-5.15.11-bin.tar.gz

3) 启动

进到bin目录

  ./activeMQ start 
  ./activeMQ status

查看状态后 ActiveMQ not running, Active没启动.

4) 输出日志到控制台,看错误信息

./activemq console

在报错信息中我们看到了hostname关键词,到百度查阅资料后是因为主机名中含有下划线

hostnamectl set-hostname  Java

通过该句命令修改主机的名字为Java,然后重新执行

./activemq start

启动成功,访问后台

(我在本机也安装了一个ActiveMQ,下文的操作将直接使用本机的ActiveMQ)

ActiceMQ DEMO

环境

导入相关依赖

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.15.9</version>
</dependency>
一对一

开启一个生产者

package com.zero.day1;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * ActiveMQ测试类 Hello World
 */
public class Demo1 {

    public static void main(String[] args) {

        Demo1.producerQuene();
    }

    public static void producerQuene (){
        try {
            // Create a ConnectionFactory 创建工厂连接对象
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            // Create a Connection 使用连接工厂创建一个连接对象
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // Create a Session 创建会话session对象
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // create the destination (Topic or Quene) 创建目标对象(一对一or一对多)
            Destination destination = session.createQueue("TEST.FOO1");

            // Create a MessageProducer from the Session to the Topic or Quene 创建生产者对象
            MessageProducer producer = session.createProducer(destination);

            String text = "hello world";

            // create a messages 创建一个消息对象
            TextMessage message = session.createTextMessage(text);

            // tell the producer to send the message 发送消息
            producer.send(message);
            System.out.println("发送成功");
            // clean up 关闭资源
            session.close();
            connection.close();



        } catch (Exception e) {
            System.out.println("Caught" + e);
            e.printStackTrace();

        }




    }
}


  查看后台

被消费者消费

public static  void consumerQuene () {
        try {

            // create a connectionFactory 创建工厂连接对象
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            // create a connection 使用连接工厂创建一个连接对象
            Connection connection = connectionFactory.createConnection();
            connection.start();


            //create a session 创建会话session对象
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // create the destination(Topic or Quene) 创建目标对象(一对一or一对多)
            Destination destination = session.createQueue("TEST.FOO1");

            // create a MessageConsumer from the session to the Topic or Quene 创建消费者对象
            MessageConsumer consumer = session.createConsumer(destination);

            // wait for a message 创建一个消息对象
            Message message = consumer.receive(1000);


            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message ;
                String text = textMessage.getText();

                System.out.println("Received: " + text);
            } else {
                System.out.println("Received: " + message);

            }

            consumer.close();
            session.close();
            connection.close();

        } catch (Exception e) {
            System.out.println("Caught: " + e);
            e.printStackTrace();
        }



    }

控制台

后台被消费一次

一对多

生产者

package com.zero.day2;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 使用ActiveMQ操作一对多消息通信
 */
public class ProducerDemo {
    public static void main(String[] args) {
        ProducerDemo.topicProducer();

    }


    public static void topicProducer () {
        try {
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            Connection connection = connectionFactory.createConnection();

            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Topic topic = session.createTopic("myTopic");

            MessageProducer producer = session.createProducer(topic);

            TextMessage textMessage = session.createTextMessage("hello");

            producer.send(textMessage);
            System.out.println("消息已经发送: " + textMessage.getText());
            producer.close();
            session.close();
            connection.close();



        } catch (Exception e) {
            System.out.println("Caught" + e);
            e.printStackTrace();

        }
    }



}

消费者

package com.zero.day2;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class ConsumerDemo {

    public static void main(String[] args) {
        ConsumerDemo.topicConsumer();
    }


    public static void topicConsumer () {
        try {
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            Connection connection = connectionFactory.createConnection();

            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Topic topic = session.createTopic("myTopic");

            MessageConsumer consumer = session.createConsumer(topic);

            consumer.setMessageListener(new MessageListener() {

                public void onMessage(Message message) {
                    if(message instanceof TextMessage){
                        TextMessage textMessage = (TextMessage)message;
                        try {
                            System.out.println(textMessage.getText());
                        } catch (JMSException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
            System.in.read();
            consumer.close();
            session.close();
            connection.close();


        } catch (Exception e) {
            System.out.println("Caught: " + e);
            e.printStackTrace();
        }
    }
}

注意: 要先启动消费者再启动生产者

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值