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

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
會發現,檔案無法下載下傳,我嘗試着關閉防火牆,重新開機network,無效(因為響應是200)
因為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
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
2.解壓apache-activemq-5.15.8-bin.tar.gz
tar -xzvf ./apache-activemq-5.15.8-bin.tar.gz
3.啟動ActiveMQ
①ActiveMQ内置了jetty Web容器,jetty的相關配置在jetty.xml中
vim /usr/local/apache-activemq-5.15.8/conf/jetty.xml
②ActiveMQ的配置檔案
vim /usr/local/apache-activemq-5.15.8/conf/activemq.xml
③ActiveMQ管控台的使用者名密碼配置
vim /usr/local/apache-activemq-5.15.8/conf/jetty-realm.properties
④進入bin目錄,啟動ActiveMQ
/usr/local/apache-activemq-5.15.8/bin/activemq start
檢視端口61616是否開啟
netstat -an|grep 61616
netstat -an|grep 8161
⑤登入ActiveMQ管控台:
http://192.168.0.115:8161/admin/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管控台,會看到剛剛建立的消息數量和狀态
點選消息名稱檢視
②消息接收方(消費者):
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();
}
}
}
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
按之前的程式發送消息就會報錯:
需要對程式進行修改(生産者和消費者都要改)
待續。。。