MQ(ActiveMQ)代碼Part01(入門運用、pom.xml)

  <!--activemq 所需-->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.15.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>5.15.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <version>3.16</version>
        </dependency>

JMSProducerQueue

public class JmsProduce {
    public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
    public static final String QUEUE_NAME = "queue01";

    public static void main(String[] args) throws JMSException {
        // 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2、通過連接工廠,獲得連接Connection
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Queue queue = session.createQueue(QUEUE_NAME);
        // 5、創建消息的生產者
        MessageProducer producer = session.createProducer(queue);
        // 6、通過使用producer 生產3條消息發送到mq的隊列裏面
        for (int i = 0; i < 6; i++) {
            // 7、創建消息,好比快遞
            TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
// 8、通過producer發送給mq
            producer.send(textMessage);
        }
        // 9、關閉資源
        producer.close();
        session.close();
        connection.close();

        System.out.println("消息發送到mq完成");
    }
}

JmsConsumeQueue

public class JmsConsume {
    public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
    public static final String QUEUE_NAME = "queue01";

    public static void main(String[] args) throws Exception {
        System.out.println("我是1號");
        // 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2、通過連接工廠,獲得連接Connection
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Queue queue = session.createQueue(QUEUE_NAME);
        // 5、創建消費者
        MessageConsumer consumer = session.createConsumer(queue);
        /**
         同步阻塞方式 receive()
         訂閱者或接受者調用MessageConsumer的receive()方法來接受信息,receive方法能夠接收到消息之前(或超時之前)將一直阻塞
         while(true){
         TextMessage textMessage = (TextMessage)consumer.receive(4000L);
         if(null != textMessage){
         System.out.println("消費者接受到消息"+textMessage.getText());
         }else{
         break;
         }
         }
         // 6、關閉資源
         consumer.close();
         session.close();
         connection.close();
         **/
        // 通過監聽的方式來消費消息
        /**
         * 異步非阻塞方式(監聽器onMessage())
         * 訂閱者或接受者通過MessageConsumer的setMessageListener(MessageListener listener)註冊一個消息監聽器
         * 當消息到達之後,系統自動調用監聽器MessageListener的onMessage(Message message) 方法
         */
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                if (null != message && 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();
        System.out.println("接受到");
        /**
         * 1、先生產, 只啓動1號消費者, 問題:1號 消費者能消費消息麼
         *  √
         * 2、先生存,先啓動1號消費者再啓動2號,問題:2號消費者還能消費消息麼?
         *  2.1、1號可以消費 √
         *  2.2、2號可以消費 ×
         * 3、先啓動2個消費者,再生產6條消息,消費情況如何?
         *  3.1、2個消費者都有6條
         *  3.2、先到先得 6條全給一個
         *  3.3、一人一半 √
         */
    }
}

JmsProduceTopic

public class JmsProduce_topic {
    public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
    public static final String TOPIC_NAME = "topic01";

    public static void main(String[] args) throws JMSException {
        // 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2、通過連接工廠,獲得連接Connection
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Topic queue = session.createTopic(TOPIC_NAME);
        // 5、創建消息的生產者
        MessageProducer producer = session.createProducer(queue);
        // 6、通過使用producer 生產3條消息發送到mq的隊列裏面
        for (int i = 0; i < 6; i++) {
            // 7、創建消息,好比快遞
            TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
// 8、通過producer發送給mq
            producer.send(textMessage);
        }
        // 9、關閉資源
        producer.close();
        session.close();
        connection.close();

        System.out.println("消息發送到mq完成");
    }
}

JmsConsumeTopic

public class JmsConsumeTopic {
    public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
    public static final String TOPIC_NAME = "topic01";

    public static void main(String[] args) throws Exception {
        System.out.println("我是1號");
        // 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2、通過連接工廠,獲得連接Connection
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Topic topic = session.createTopic(TOPIC_NAME);
        // 5、創建消費者
        MessageConsumer consumer = session.createConsumer(topic);

        // 通過監聽方式收取主題消息
        consumer.setMessageListener((message)->{
            if (null != message && message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;

                try {
                    String username = textMessage.getStringProperty("username");
                    System.out.println(username);
                    System.out.println("消費者接收到topic消息" + textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
            if (null != message && message instanceof MapMessage) {
                MapMessage mapMessage = (MapMessage) message;
                try {
                    System.out.println("消費者接收到topic消息" + mapMessage.getString("aa"));
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        // 保持程序運行 還沒有消費到消息就關掉了連接
        System.in.read();
        consumer.close();
        session.close();
        connection.close();
    }
}

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