在學習JMS過程中,網上找了很多資料,選定ActiveMQ做為JMS的組件開發,於是實現了一個簡單的例子。
第一步:下載ActiveMQ,測試執行個體採用的是apache-activemq-5.6.0,啟動Message Service的Server,activemq.bat。
第二步:Eclipse建立了一個工程:匯入jar包有:activemq-core-5.6.0.jar、activemq-pool-5.3.0.jar、kahadb-5.6.0.jar、slf4j-api-1.6.4.jar、slf4j-nop-1.6.4.jar
訊息寄件者Sender類:
package com.zyujie.jms;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {private static final int SEND_NUMBER = 5;public static void main(String[] args) {// ConnectionFactory :串連工廠,JMS 用它建立串連ConnectionFactory connectionFactory;// Connection :JMS 用戶端到JMS Provider 的串連Connection connection = null;// Session: 一個發送或接收訊息的線程Session session;// Destination :訊息的目的地;訊息發送給誰.Destination destination;// MessageProducer:訊息寄件者MessageProducer producer;// TextMessage message;// 構造ConnectionFactory執行個體對象,此處採用ActiveMq的實現jarconnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");try {// 構造從工廠得到連線物件connection = connectionFactory.createConnection();// 啟動connection.start();// 擷取操作串連session = connection.createSession(Boolean.TRUE.booleanValue(),Session.AUTO_ACKNOWLEDGE);// 擷取session注意參數值zyujie-queue是一個伺服器的queue,須在在ActiveMq的console配置destination = session.createQueue("zyujie-queue");// 得到訊息產生者【寄件者】producer = session.createProducer(destination);// 設定不持久化,此處學習,實際根據項目決定producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 構造訊息,此處寫死,項目就是參數,或者方法擷取sendMessage(session, producer);session.commit();} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}public static void sendMessage(Session session, MessageProducer producer)throws Exception {for (int i = 1; i <= SEND_NUMBER; i++) {TextMessage message = session.createTextMessage("Hello ActiveMq 發送的訊息" + i);// 發送訊息到目的地方System.out.println("發送訊息:" + "Hello ActiveMq 發送的訊息" + i);producer.send(message);}}}
訊息接收類:
package com.zyujie.jms;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {public static void main(String[] args) {// ConnectionFactory :串連工廠,JMS 用它建立串連ConnectionFactory connectionFactory;// Connection :JMS 用戶端到JMS Provider 的串連Connection connection = null;// Session: 一個發送或接收訊息的線程Session session;// Destination :訊息的目的地;訊息發送給誰.Destination destination;// 消費者,訊息接收者MessageConsumer consumer;connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");try {// 構造從工廠得到連線物件connection = connectionFactory.createConnection();// 啟動connection.start();// 擷取操作串連session = connection.createSession(Boolean.FALSE.booleanValue(),Session.AUTO_ACKNOWLEDGE);// 擷取session注意參數值zyujie-queue是一個伺服器的queue,須在在ActiveMq的console配置destination = session.createQueue("zyujie-queue");consumer = session.createConsumer(destination);while (true) {TextMessage message = (TextMessage) consumer.receive(1000);if (null != message) {System.out.println("收到訊息" + message.getText());} else {break;}}} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}}
這樣一個簡單的ActiveMQ執行個體運行成功。
ActiveMQ的特點優勢介紹網上有很多,就沒有寫出來了。ActiveMQ也可以自行修改很多配置資訊,比如修改其連接埠號碼等等。
關於ActiveMQ整合Spring的開發,還在學習中。