ActiveMQ入門(一)

安裝:使用服務安裝,不用每次啓動“黑匣子”。

啓動之後瀏覽器可以進入後臺管理:

 

代碼演示兩種消息模式:

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

    }
}

如果先發布消息,再運行消費方接收消息,消費方是接收不到任何信息的,消費方需要先訂閱,才能接收到消息。

主題模式多個消費方收到全部的消息,是完全一樣的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章