ActiveMq持久訂閱小例子

public class ProducerTopic {
    public static void main(String[] args) throws JMSException {
        String user = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerUrl = "tcp://hadoop2:61616";
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
        /**
         * 創建連接並開啓
         */
        Connection connection = connectionFactory.createConnection();

        /**
         * 創建session
         * 參數1:不啓動事務
         * 參數2:簽收模式爲自動簽收
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        /**
         * 創建topic或者queue
         */
        Topic topic_2 = session.createTopic("topic_2");
        /**
         * 創建生產者
         */
        MessageProducer producer = session.createProducer(topic_2);
        //此生產者生產的數據持久化
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        /**
         * 注意,一定要在設置了持久化之後再啓動connection
         */
        connection.start();
        /**
         * 生產數據
         */
        for (int i = 0; i < 10; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("hello java " + i);
            producer.send(textMessage);
        }

        /**
         * 釋放連接
         */
        connection.close();

    }
}
public class ConsumerTopic {
    public static void main(String[] args) {
        String user = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerUrl = "tcp://hadoop2:61616";

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
        Connection connection = null;
        try {
            /**
             * 創建連接並開啓,註冊一個客戶號,讓broker知道是誰訂閱了。
             * 需要在producer發消息之前,先運行一下此程序,目的是註冊訂閱信息,然後就可以關閉程序
             * 這樣就可以做到再次啓動時,收到離線的消息。
             */
            connection = connectionFactory.createConnection();
            connection.setClientID("c1");
            /**
             * 創建session
             * 參數1:不啓動事務
             * 參數2:簽收模式爲自動簽收
             */
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            /**
             * 創建topic或者queue
             */
            Topic topic_2 = session.createTopic("topic_2");
            //對於topic_2,建立持久訂閱,名字隨便起
            TopicSubscriber durableSubscriber = session.createDurableSubscriber(topic_2, "somebody");
            connection.start();
            /**
             * 消費數據
             */
            while (true) {
                TextMessage textMessage = (TextMessage) durableSubscriber.receive();
                System.out.println("消費消息:" + textMessage.getText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章