1. 程式人生 > >ActiveMQ簡單的入門demo

ActiveMQ簡單的入門demo

 

:)

1.為什麼使用ActiveMQ

1.1.簡介

1.2.MQ特點

1.3.使用場景

2.基本操作的demo

3.能幹什麼



1.為什麼使用ActiveMQ

1.1.簡介

MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過寫和檢索出入列隊的針對應用程式的資料(訊息)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是通過直接呼叫彼此來通訊,直接呼叫通常是用於諸如遠端過程呼叫的技術。排隊指的是應用程式通過佇列來通訊。佇列的使用除去了接收和傳送應用程式同時執行的要求。

1.2.MQ特點

MQ的消費-生產者模型的一個典型的代表,一端往訊息佇列中不斷的寫入訊息,而另一端則可以讀取或者訂閱佇列中的訊息。

1.3.使用場景

在專案中,將一些無需即時返回且耗時的操作提取出來,進行了非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。

2.基本操作的demo


    //生產者
    static void testMQProducerQueue() throws Exception{
        //建立連線工廠,設定ip和埠號
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
        //建立連線
        Connection connection = connectionFactory.createConnection();
        //開啟連線
        connection.start();
        //建立會話
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //建立佇列,佇列名叫test-queue
        Queue queue =session.createQueue("test-queue");
        //建立訊息生產者
        MessageProducer producer = session.createProducer(queue);
        //建立一個字串訊息
        TextMessage textMessage = session.createTextMessage("hellow_mq");
        //傳送訊息
        producer.send(textMessage);
        //關閉資源
        producer.close();
        session.close();
        connection.close();
    }
    //消費者
    static void testMQConsumerQueue() throws Exception{
        //建立連線工廠,設定ip和埠號
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
        //建立連線
        Connection connection = connectionFactory.createConnection();
        //開啟連線
        connection.start();
        //建立會話
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //建立佇列,佇列名叫test-queue
        Queue queue =session.createQueue("test-queue");
        //建立消費者
        MessageConsumer consumer = session.createConsumer(queue);
        //建立訊息監聽器
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                if (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();
    }

3.能幹什麼

1.流量削峰

2.任務非同步處理

特點:可以解耦合

     (學習新技術的三要素:是什麼?能幹什麼?有什麼優勢?)