MQ(ActiveMQ)代碼Part02(持久、簽收)

JmsProduceTopicPersist

public class JmsProduceTopicPersist {
    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();

        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Topic queue = session.createTopic(TOPIC_NAME);
        // 5、創建消息的生產者
        MessageProducer producer = session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        connection.start();
        // 6、通過使用producer 生產3條消息發送到mq的隊列裏面
        for (int i = 0; i < 6; i++) {
            // 7、創建消息,好比快遞
            TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
//            textMessage.setJMSMessageID("11312");
            // 8、通過producer發送給mq
            producer.send(textMessage);
        }
        // 9、關閉資源
        producer.close();
        session.close();
        connection.close();

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

JmsConsumeTopicPersist

public class JmsConsumeTopicPersist {
    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("我是2號");
        // 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
        // 2、通過連接工廠,獲得連接Connection
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.setClientID("ss");

        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Topic topic = session.createTopic(TOPIC_NAME);
        TopicSubscriber durableSubscriber = session.createDurableSubscriber(topic, "reee...");

        connection.start();
        Message message = durableSubscriber.receive();
        System.out.println("初步消息" + message);
        while (null != message) {
            TextMessage message1 = (TextMessage) message;
            System.out.println("收到的" + message1.getText());
            message = durableSubscriber.receive();
        }
        session.close();
        connection.close();
        /**
         * 1、一定要先運行一次消費者,等於向MQ註冊,類似我訂閱了這個主題。
         * 2、然後再運行生產者發送信息。此時,無論消費者是否在線,都會接收到,不在線的話,下次連接的時候,會把沒有收過的消息都接收下來
         */
    }
}

事務 JmsProduceTopicTransaction

public class JmsProduceTopicTransaction {
    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();

        // 3、創建會話session
        // 兩個參數,第一個叫事務/第二個叫簽收
        Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
        // 4、創建目的地(具體是隊列還是主體topic)
        Topic queue = session.createTopic(TOPIC_NAME);
        // 5、創建消息的生產者
        MessageProducer producer = session.createProducer(queue);
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        connection.start();
        // 6、通過使用producer 生產3條消息發送到mq的隊列裏面
        for (int i = 0; i < 6; i++) {
            // 7、創建消息,好比快遞
            TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
//            textMessage.setJMSMessageID("11312");
            // 8、通過producer發送給mq
            producer.send(textMessage);
        }
        // 9、關閉資源
        producer.close();
        // 沒有的話 消息會被重複消費 會很混亂
        session.commit();
        session.close();
        connection.close();

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

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