安裝部署(三) 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節
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章