ActiveMQ入门(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LuuvyJune/article/details/90445196

安装:使用服务安装,不用每次启动“黑匣子”。

启动之后浏览器可以进入后台管理:

 

代码演示两种消息模式:

pom.xml:

<dependencies>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-core</artifactId>
            <version>5.7.0</version>
        </dependency>
    </dependencies>

队列消息模式:

生产方:

public class AppProducer {


    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);

        /** 5.创建目标 */
        Destination destination = session.createQueue(queueName);

        /** 6.创建一个生产者 */
        MessageProducer producer = session.createProducer(destination);

        for (int i = 0; i < 100; i++) {
            /** 7.创建消息 */
            TextMessage textMessage = session.createTextMessage("test"+i);
            /** 8.发布消息 */
            producer.send(textMessage);

            System.out.println("发布消息"+textMessage.getText());
        }

        /** 9.关闭连接 */
        connection.close();

    }
}

运行可以看到后台:

消费方:

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);

        /** 5.创建目标 */
        Destination destination = session.createQueue(queueName);

        /** 6.创建一个消费者 */
        MessageConsumer consumer = session.createConsumer(destination);

        /** 7.创建一个监听器 */
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage message1 = (TextMessage) message;
                try {
                    System.out.print("接收消息:"+message1.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });


        /** 8.关闭连接 */
//        connection.close();

    }
}

多个消费者运行结果:接收的消息是不同的,基本上均摊

主题模式:
生产方:

public class AppProducer {


    private static final String url = "tcp://127.0.0.1:61616";
    private static final String topicName = "topic-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);

        /** 5.创建目标 */
        Destination destination = session.createTopic(topicName);

        /** 6.创建一个生产者 */
        MessageProducer producer = session.createProducer(destination);

        for (int i = 0; i < 100; i++) {
            /** 7.创建消息 */
            TextMessage textMessage = session.createTextMessage("test"+i);
            /** 8.发布消息 */
            producer.send(textMessage);

            System.out.println("发布消息"+textMessage.getText());
        }

        /** 9.关闭连接 */
        connection.close();

    }
}

运行可看到: 

 

消费方:

public class AppConsumer {
    private static final String url = "tcp://127.0.0.1:61616";
    private static final String topicName = "topic-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);

        /** 5.创建目标 */
        Destination destination = session.createTopic(topicName);

        /** 6.创建一个消费者 */
        MessageConsumer consumer = session.createConsumer(destination);

        /** 7.创建一个监听器 */
        consumer.setMessageListener(new MessageListener() {
            public void onMessage(Message message) {
                TextMessage message1 = (TextMessage) message;
                try {
                    System.out.print("接收消息:"+message1.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });


        /** 8.关闭连接 */
//        connection.close();

    }
}

如果先发布消息,再运行消费方接收消息,消费方是接收不到任何信息的,消费方需要先订阅,才能接收到消息。

主题模式多个消费方收到全部的消息,是完全一样的。

 

猜你喜欢

转载自blog.csdn.net/LuuvyJune/article/details/90445196