天天看點

Linux下安裝ActiveMQ-5.15.8

1.ActiveMQ官網連結: http://activemq.apache.org/

Linux下安裝ActiveMQ-5.15.8
①選擇Download
Linux下安裝ActiveMQ-5.15.8
②選擇ActiveMQ 5.15.8 Release
Linux下安裝ActiveMQ-5.15.8
需要注意的是:ActiveMQ 5.15.8所需Jdk版本最低為1.8,修改具體請看Change Log
Linux下安裝ActiveMQ-5.15.8
③複制下載下傳連結

cd /usr/local
wget http://www.apache.org/dyn/closer.cgi?filename=/activemq/5.15.8/apache-activemq-5.15.8-bin.tar.gz&action=download           
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

會發現,檔案無法下載下傳,我嘗試着關閉防火牆,重新開機network,無效(因為響應是200)

Linux下安裝ActiveMQ-5.15.8

因為URL中有一個"&"需要轉義"&"

cd /usr/local
wget http://www.apache.org/dyn/closer.cgi?filename=\/activemq\/5.15.8\/apache-activemq-5.15.8-bin.tar.gz\&action=download           
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

wget的命名規則是取最後一個"/"後面的内容,檔案重命名

mv ./closer.cgi\?filename\=%2Factivemq%2F5.15.8%2Fapache-activemq-5.15.8-bin.tar.gz\&action\=download ./apache-activemq-5.15.8-bin.tar.gz           
Linux下安裝ActiveMQ-5.15.8

2.解壓apache-activemq-5.15.8-bin.tar.gz

tar -xzvf ./apache-activemq-5.15.8-bin.tar.gz           
Linux下安裝ActiveMQ-5.15.8

3.啟動ActiveMQ

①ActiveMQ内置了jetty Web容器,jetty的相關配置在jetty.xml中

vim /usr/local/apache-activemq-5.15.8/conf/jetty.xml           
Linux下安裝ActiveMQ-5.15.8

②ActiveMQ的配置檔案

vim /usr/local/apache-activemq-5.15.8/conf/activemq.xml           
Linux下安裝ActiveMQ-5.15.8

③ActiveMQ管控台的使用者名密碼配置

vim /usr/local/apache-activemq-5.15.8/conf/jetty-realm.properties           
Linux下安裝ActiveMQ-5.15.8

④進入bin目錄,啟動ActiveMQ

/usr/local/apache-activemq-5.15.8/bin/activemq start           
Linux下安裝ActiveMQ-5.15.8

檢視端口61616是否開啟

netstat -an|grep 61616
netstat -an|grep 8161           
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

⑤登入ActiveMQ管控台:

http://192.168.0.115:8161/admin/
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

4.編寫程式

①消息發送方(生産者):

package activemq;

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ActiveMQ_Sender {
    public static void main(String[] args) throws JMSException {
        //1.建立ConnectionFactory工廠對象,需要填入使用者名、密碼以及要連接配接的位址,均使用預設即可,
        // 預設端口為"tcp://localhost:61616"
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://192.168.0.115:61616"
        );

        //2.通過ConnectionFactory工廠對象我們建立一個Connection連接配接,并且調用Connection的start方法開啟連接配接,
        // connection預設是關閉的
        Connection connection = connectionFactory.createConnection();
        connection.start();

        //3.通過Connection工廠對象建立Session會話(上下文環境對象),用于接收消息,
        // 參數1為是否啟用事務,參數2為簽收模式,一般我們設定自動簽收
        Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

        //4.通過Session建立Destination對象,指的是一個用戶端用來指定生産消息目标和消費資訊來源的對象,
        // 在P2P模式中,Destination被稱作Queue即隊列;在Pub/Sub模式,Destination被稱作Topic即主題。
        // 在程式中可以使用多個Queue和Topic
        Destination destination = session.createQueue("Queue_01");

        //5.我們需要通過Session對象建立消息的發送和接收對象(生産者和消費者),MessageProducer/MessageConsumer
        MessageProducer messageProducer = session.createProducer(destination);

        //6.我們可以使用MessageProducer的setDeliveryMode()方法為其設定持久化特性和非持久化特性(DeliveryMode)
        messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

        //7.使用JMS規範的TextMessage形式建立資料(通過Session對象),并用MessageProducer的send方法發送資料。
        // 同理用戶端使用receive方法進行接收資料
        for (int i = 1; i <= 10; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("Sender: HelloWorld! Message_ID = "+i);
            messageProducer.send(textMessage);
        }

        //8.關閉Connection連接配接
        if (connection != null){
            connection.close();
        }
    }
}           

運作成功後,重新整理ActiveMQ管控台,會看到剛剛建立的消息數量和狀态

Linux下安裝ActiveMQ-5.15.8

點選消息名稱檢視

Linux下安裝ActiveMQ-5.15.8

②消息接收方(消費者):

package activemq;

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ActiveMQ_Receiver {
    public static void main(String[] args) throws JMSException {
        //1.建立ConnectionFactory工廠對象,需要填入使用者名、密碼以及要連接配接的位址,均使用預設即可,
        // 預設端口為"tcp://localhost:61616"
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                ActiveMQConnectionFactory.DEFAULT_USER,
                ActiveMQConnectionFactory.DEFAULT_PASSWORD,
                "tcp://192.168.0.115:61616"
        );

        //2.通過ConnectionFactory工廠對象我們建立一個Connection連接配接,并且調用Connection的start方法開啟連接配接,
        // connection預設是關閉的
        Connection connection = connectionFactory.createConnection();
        connection.start();

        //3.通過Connection工廠對象建立Session會話(上下文環境對象),用于接收消息,
        // 參數1為是否啟用事務,參數2為簽收模式,一般我們設定自動簽收
        Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

        //4.通過Session建立Destination對象,指的是一個用戶端用來指定生産消息目标和消費資訊來源的對象,
        // 在P2P模式中,Destination被稱作Queue即隊列;在Pub/Sub模式,Destination被稱作Topic即主題。
        // 在程式中可以使用多個Queue和Topic
        Destination destination = session.createQueue("Queue_01");

        //5.我們需要通過Session對象建立消息的發送和接收對象(生産者和消費者),MessageProducer/MessageConsumer
        MessageConsumer messageConsumer = session.createConsumer(destination);

        //6.使用JMS規範的TextMessage形式建立資料(通過Session對象),并用MessageProducer的send方法發送資料。
        // 同理用戶端使用receive方法進行接收資料
        while (true){
            TextMessage textMessage = (TextMessage) messageConsumer.receive();
            if (textMessage == null) break;
            System.out.println("Receive_Message: "+textMessage.getText());
        }

        //8.關閉Connection連接配接
        if (connection != null){
            connection.close();
        }
    }
}           
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

5.ActiveMQ安全機制

隻有符合認證的使用者才能進行發送和接收消息

<plugins>
    <simpleAuthenticationPlugin>
        <users>
            <authenticationUser username="ysx" password="ysx" groups="users,admins"/>
        </users>
    </simpleAuthenticationPlugin>
</plugins>           

在/usr/local/apache-activemq-5.15.8/conf/activemq.xml的大約123行,之前,之後加上上面的插件配置,重新開機ActiveMQ

按之前的程式發送消息就會報錯:

Linux下安裝ActiveMQ-5.15.8

需要對程式進行修改(生産者和消費者都要改)

Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8
Linux下安裝ActiveMQ-5.15.8

待續。。。