安裝部署(三) openMQ安裝和使用
openMQ安裝和使用
windows 10 x64
jdk 1.7
1 下載
https://mq.java.net/downloads/index.html
openmq5_1-binary-windows.zip
2 解壓
到D:\XSetups\openmq5_1-binary-windows
{mq_home}=D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1
3 配置
{mq_home}\etc\mq\imqenv.conf
REM Default location of J2SE
set IMQ_DEFAULT_JAVAHOME=E:\wjb-workspace\Java\jdk1.7.0_17
REM
REM Default location of MQ's "var" filesystem
REM set IMQ_DEFAULT_VARHOME=D:\XSetups\openmq5_1-binary-windows\var
4 啓動broker
cmd
{mq_home}\mq\bin\imqbrokerd.exe
若提示日誌禁用,不管它,先測試
5 檢查broker是否啓動
再開一個cmd
{mq_home}\mq\bin\imqcmd.exe query bkr -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query bkr -u admin
口令:admin
查詢指定的中介:
-----------------
主機 主端口
-----------------
localhost 7676
版本 5.1
實例名稱 imqbroker
中介 ID
主端口 7676
已嵌入中介 false
實例配置/數據根目錄 D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\var\mq
系統中當前的消息數 0
系統中當前的消息大小 (字節) 0
停用消息隊列中的當前消息數量 0
停用消息隊列中的當前消息字節總數 0
記錄停用消息 false
截斷停用消息隊列中的消息主體 false
系統中的最大消息數 無限制 (-1)
系統中的最大消息大小 無限制 (-1)
最大消息大小 70m
自動創建隊列 true
自動創建主題 true
自動創建隊列的最大活動使用者數 無限制 (-1)
自動創建隊列的最大備份使用者數 0
自動創建的目標 useDMQ true
集羣 ID
集羣具有高可用性 false
集羣中介列表 (處於活動狀態) mq://10.1.1.19:7676/
集羣中介列表 (處於已配置狀態)
集羣主中介
集羣 URL
日誌級別 INFO
日誌更新間隔 (秒)
日誌更新大小 (字節) 268435456
成功查詢中介。
6 編寫Producer
import javax.jms.*;
public class Sender {
public static void main(String[] args) {
try {
ConnectionFactory cf = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)cf).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = cf.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageProducer mp = sn.createProducer(dest);
TextMessage tm = sn.createTextMessage();
tm.setText("A test message");
mp.send(tm);
System.out.println("Message sent:");
sn.close();
con.close();
} catch (Exception e) { e.printStackTrace(); }
}
}
6.1 執行
注意:jms.jar和imq.jar在如下目錄,拷過來
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\lib
javac -cp jms.jar;imq.jar;. Sender.java
java -cp jms.jar;imq.jar;. Sender AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. Sender AQueue
Message sent:
6.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query dst -n AQueue -t q -u admin
口令:
查詢目標, 其中:
--------------
目標名稱 目標類型
--------------
AQueue 隊列
在指定的中介上:
-----------------
主機 主端口
-----------------
localhost 7676
目標名稱 AQueue
目標類型 隊列
目標狀態 RUNNING
是以管理方式創建的 false
當前的消息數
實際 1
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前消息字節
實際 146
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前的生成器數 0
當前的活動使用者數 0
當前的備份使用者數 0
最大消息數 100000
消息的最大總計大小 (字節) 10737418240
每條消息的最大大小 (字節) 10485760
最大生成器數 100
最大活動使用者數 無限制 (-1)
最大備份使用者數 0
限制性能 REJECT_NEWEST
使用者流限制 1000
是本地目標 false
首選本地傳送 false
使用停用消息隊列 true
已啓用 XML 方案驗證 false
XML 方案 URI 列表 -
在失敗時重新加載 XML 方案 false
成功查詢目標。
【當前消息數1】
7 編寫Consumer
import javax.jms.*;
public class SynReceiver {
public static void main(String[] args) {
try {
ConnectionFactory cf = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)cf).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = cf.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageConsumer mc = sn.createConsumer(dest);
con.start();
TextMessage msg = (TextMessage) mc.receive();
System.out.println("Received message: "+msg.getText());
sn.close();
con.close();
} catch (Exception e) { e.printStackTrace(); }
}
}
7.1 執行
javac -cp jms.jar;imq.jar;. SynReceiver.java
java -cp jms.jar;imq.jar;. SynReceiver AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. SynReceiver AQueue
Received message: A test message
7.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query dst -n AQueue -t q -u admin
口令:
查詢目標, 其中:
--------------
目標名稱 目標類型
--------------
AQueue 隊列
在指定的中介上:
-----------------
主機 主端口
-----------------
localhost 7676
目標名稱 AQueue
目標類型 隊列
目標狀態 RUNNING
是以管理方式創建的 false
當前的消息數
實際 0
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前消息字節
實際 0
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前的生成器數 0
當前的活動使用者數 0
當前的備份使用者數 0
最大消息數 100000
消息的最大總計大小 (字節) 10737418240
每條消息的最大大小 (字節) 10485760
最大生成器數 100
最大活動使用者數 無限制 (-1)
最大備份使用者數 0
限制性能 REJECT_NEWEST
使用者流限制 1000
是本地目標 false
首選本地傳送 false
使用停用消息隊列 true
已啓用 XML 方案驗證 false
XML 方案 URI 列表 -
在失敗時重新加載 XML 方案 false
成功查詢目標。
【當前消息數變成了0】
8 編寫Consumer 異步
import javax.jms.*;
public class AsynReceiver {
public static void main(String[] args) {
try {
ConnectionFactory conFactory = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)conFactory).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = conFactory.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageConsumer mc = sn.createConsumer(dest);
con.start();
mc.setMessageListener(new AListener());
System.out.println("Continuing its own work");
} catch (Exception e) { e.printStackTrace(); }
}
}
class AListener implements MessageListener {
public void onMessage(Message msg) {
TextMessage tm = (TextMessage) msg;
try {
System.out.println("Received: " + tm.getText());
} catch (Exception e) { e.printStackTrace(); }
}
}
8.1 執行
javac -cp jms.jar;imq.jar;. AsynReceiver.java
java -cp jms.jar;imq.jar;. AsynReceiver AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. Sender AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. SynReceiver AQueue
Received message: A test message
8.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
9 PUB/SUB模式
參考《Advanced Java Programming》25章12節
windows 10 x64
jdk 1.7
1 下載
https://mq.java.net/downloads/index.html
openmq5_1-binary-windows.zip
2 解壓
到D:\XSetups\openmq5_1-binary-windows
{mq_home}=D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1
3 配置
{mq_home}\etc\mq\imqenv.conf
REM Default location of J2SE
set IMQ_DEFAULT_JAVAHOME=E:\wjb-workspace\Java\jdk1.7.0_17
REM
REM Default location of MQ's "var" filesystem
REM set IMQ_DEFAULT_VARHOME=D:\XSetups\openmq5_1-binary-windows\var
4 啓動broker
cmd
{mq_home}\mq\bin\imqbrokerd.exe
若提示日誌禁用,不管它,先測試
5 檢查broker是否啓動
再開一個cmd
{mq_home}\mq\bin\imqcmd.exe query bkr -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query bkr -u admin
口令:admin
查詢指定的中介:
-----------------
主機 主端口
-----------------
localhost 7676
版本 5.1
實例名稱 imqbroker
中介 ID
主端口 7676
已嵌入中介 false
實例配置/數據根目錄 D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\var\mq
系統中當前的消息數 0
系統中當前的消息大小 (字節) 0
停用消息隊列中的當前消息數量 0
停用消息隊列中的當前消息字節總數 0
記錄停用消息 false
截斷停用消息隊列中的消息主體 false
系統中的最大消息數 無限制 (-1)
系統中的最大消息大小 無限制 (-1)
最大消息大小 70m
自動創建隊列 true
自動創建主題 true
自動創建隊列的最大活動使用者數 無限制 (-1)
自動創建隊列的最大備份使用者數 0
自動創建的目標 useDMQ true
集羣 ID
集羣具有高可用性 false
集羣中介列表 (處於活動狀態) mq://10.1.1.19:7676/
集羣中介列表 (處於已配置狀態)
集羣主中介
集羣 URL
日誌級別 INFO
日誌更新間隔 (秒)
日誌更新大小 (字節) 268435456
成功查詢中介。
6 編寫Producer
import javax.jms.*;
public class Sender {
public static void main(String[] args) {
try {
ConnectionFactory cf = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)cf).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = cf.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageProducer mp = sn.createProducer(dest);
TextMessage tm = sn.createTextMessage();
tm.setText("A test message");
mp.send(tm);
System.out.println("Message sent:");
sn.close();
con.close();
} catch (Exception e) { e.printStackTrace(); }
}
}
6.1 執行
注意:jms.jar和imq.jar在如下目錄,拷過來
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\lib
javac -cp jms.jar;imq.jar;. Sender.java
java -cp jms.jar;imq.jar;. Sender AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. Sender AQueue
Message sent:
6.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query dst -n AQueue -t q -u admin
口令:
查詢目標, 其中:
--------------
目標名稱 目標類型
--------------
AQueue 隊列
在指定的中介上:
-----------------
主機 主端口
-----------------
localhost 7676
目標名稱 AQueue
目標類型 隊列
目標狀態 RUNNING
是以管理方式創建的 false
當前的消息數
實際 1
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前消息字節
實際 146
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前的生成器數 0
當前的活動使用者數 0
當前的備份使用者數 0
最大消息數 100000
消息的最大總計大小 (字節) 10737418240
每條消息的最大大小 (字節) 10485760
最大生成器數 100
最大活動使用者數 無限制 (-1)
最大備份使用者數 0
限制性能 REJECT_NEWEST
使用者流限制 1000
是本地目標 false
首選本地傳送 false
使用停用消息隊列 true
已啓用 XML 方案驗證 false
XML 方案 URI 列表 -
在失敗時重新加載 XML 方案 false
成功查詢目標。
【當前消息數1】
7 編寫Consumer
import javax.jms.*;
public class SynReceiver {
public static void main(String[] args) {
try {
ConnectionFactory cf = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)cf).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = cf.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageConsumer mc = sn.createConsumer(dest);
con.start();
TextMessage msg = (TextMessage) mc.receive();
System.out.println("Received message: "+msg.getText());
sn.close();
con.close();
} catch (Exception e) { e.printStackTrace(); }
}
}
7.1 執行
javac -cp jms.jar;imq.jar;. SynReceiver.java
java -cp jms.jar;imq.jar;. SynReceiver AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. SynReceiver AQueue
Received message: A test message
7.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
D:\XSetups\openmq5_1-binary-windows\MessageQueue5.1\mq\bin>imqcmd query dst -n AQueue -t q -u admin
口令:
查詢目標, 其中:
--------------
目標名稱 目標類型
--------------
AQueue 隊列
在指定的中介上:
-----------------
主機 主端口
-----------------
localhost 7676
目標名稱 AQueue
目標類型 隊列
目標狀態 RUNNING
是以管理方式創建的 false
當前的消息數
實際 0
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前消息字節
實際 0
遠程 0
在延遲傳送中 0
在事務處理中保留 0
當前的生成器數 0
當前的活動使用者數 0
當前的備份使用者數 0
最大消息數 100000
消息的最大總計大小 (字節) 10737418240
每條消息的最大大小 (字節) 10485760
最大生成器數 100
最大活動使用者數 無限制 (-1)
最大備份使用者數 0
限制性能 REJECT_NEWEST
使用者流限制 1000
是本地目標 false
首選本地傳送 false
使用停用消息隊列 true
已啓用 XML 方案驗證 false
XML 方案 URI 列表 -
在失敗時重新加載 XML 方案 false
成功查詢目標。
【當前消息數變成了0】
8 編寫Consumer 異步
import javax.jms.*;
public class AsynReceiver {
public static void main(String[] args) {
try {
ConnectionFactory conFactory = new com.sun.messaging.ConnectionFactory();
((com.sun.messaging.ConnectionFactory)conFactory).setProperty(com.sun.messaging.ConnectionConfiguration.imqAddressList,"localhost:7676");
Connection con = conFactory.createConnection();
Session sn = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination dest = sn.createQueue(args[0]);
MessageConsumer mc = sn.createConsumer(dest);
con.start();
mc.setMessageListener(new AListener());
System.out.println("Continuing its own work");
} catch (Exception e) { e.printStackTrace(); }
}
}
class AListener implements MessageListener {
public void onMessage(Message msg) {
TextMessage tm = (TextMessage) msg;
try {
System.out.println("Received: " + tm.getText());
} catch (Exception e) { e.printStackTrace(); }
}
}
8.1 執行
javac -cp jms.jar;imq.jar;. AsynReceiver.java
java -cp jms.jar;imq.jar;. AsynReceiver AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. Sender AQueue
F:\XWorks\codes\test\javatest\openMQ>java -cp jms.jar;imq.jar;. SynReceiver AQueue
Received message: A test message
8.2 驗證message
imqcmd query dst -n AQueue -t q -u admin
9 PUB/SUB模式
參考《Advanced Java Programming》25章12節
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.