<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2012年3月>
    26272829123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    這份程序的原始文檔是來自于互聯(lián)網(wǎng),不過不知道作者是誰,在些先謝了,我增加了個人的理解在里面,增加注釋,這樣便于閱讀與理解。

    該程序?qū)崿F(xiàn)了發(fā)送消息與讀取消息的功能,見其中的send***與get***方法。這只適合于測試,因?yàn)榄h(huán)境中的程序還需要對此有稍微的更改,在真實(shí)的環(huán)境中肯定是在while(true){...}的無限循環(huán)中去調(diào)用其中的get方法,如果有值,那就執(zhí)行對消息的處理操作,如果沒有值就繼續(xù)循環(huán),在get方法中有等待的時間。

    這個程序就其本身來說還是比較理解的:

    1、首先設(shè)置一些相關(guān)的環(huán)境變量

    2、再連接隊(duì)列管理器

    3、再次操作隊(duì)列管理器中的指定隊(duì)列

    4、往指定隊(duì)列中發(fā)消息或者是從指定對列中取消息

    5、關(guān)閉隊(duì)列

    如果不知道如何在MQ資源管理器中配置遠(yuǎn)程隊(duì)列及通過遠(yuǎn)程隊(duì)列往遠(yuǎn)程的MQ發(fā)送消息,請參見文章:

    http://blog.csdn.net/fenglibing/archive/2009/05/08/4160639.aspx

    真實(shí)環(huán)境中的MQ,個人覺得至少都應(yīng)該有兩個本地隊(duì)列加一個遠(yuǎn)程隊(duì)列,因?yàn)橄⒌慕换タ隙ㄊ窍嗷サ模惺障ⅲ隙ㄒ灿邪l(fā)消息。一個本地隊(duì)列用于接收外部發(fā)過來的消息,用法為正常;另一個本地隊(duì)例用于傳輸,用于做于遠(yuǎn)程隊(duì)例的傳輸隊(duì)列,將消息發(fā)送給遠(yuǎn)程主機(jī)的本地隊(duì)列。要使消息能夠成功的傳送到遠(yuǎn)程隊(duì)列,還需要配置通道,通常中需要指定遠(yuǎn)程通道的IP地址及端口、本地傳輸隊(duì)例的名稱、以及本地的通信地址,這樣才能夠往遠(yuǎn)程主機(jī)發(fā)送消息。

    1. /** 
    2.  * @author Fenglb E-mail:56553655@163.com 
    3.  * @version 創(chuàng)建時間:2009-4-30 下午04:13:38 
    4.  * 類說明 
    5.  */  
    6. import java.io.IOException;  
    7. import com.ibm.mq.MQC;  
    8. import com.ibm.mq.MQEnvironment;  
    9. import com.ibm.mq.MQException;  
    10. import com.ibm.mq.MQGetMessageOptions;  
    11. import com.ibm.mq.MQMessage;  
    12. import com.ibm.mq.MQPutMessageOptions;  
    13. import com.ibm.mq.MQQueue;  
    14. import com.ibm.mq.MQQueueManager;  
    15.   
    16. public class MessageByMQ{  
    17.      //定義隊(duì)列管理器和隊(duì)列的名稱   
    18.      private static String qmName;   
    19.      private static String qName;  
    20.      private static MQQueueManager qMgr;  
    21.      static{  
    22.          //設(shè)置環(huán)境:   
    23.          //MQEnvironment中包含控制MQQueueManager對象中的環(huán)境的構(gòu)成的靜態(tài)變量,MQEnvironment的值的設(shè)定會在MQQueueManager的構(gòu)造函數(shù)加載的時候起作用,   
    24.          //因此必須在建立MQQueueManager對象之前設(shè)定MQEnvironment中的值.   
    25.          MQEnvironment.hostname="10.24.1.180";          //MQ服務(wù)器的IP地址         
    26.          MQEnvironment.channel="S_FENGLB";              //服務(wù)器連接的通道   
    27.          MQEnvironment.CCSID=1381;                      //服務(wù)器MQ服務(wù)使用的編碼1381代表GBK、1208代表UTF(Coded Character Set Identifier:CCSID)   
    28.          MQEnvironment.port=1414;                       //MQ端口   
    29.          qmName = "QM_FENGLB";                          //MQ的隊(duì)列管理器名稱   
    30.          qName = "testQ";                               //MQ遠(yuǎn)程隊(duì)列的名稱   
    31.          try {  
    32.              //定義并初始化隊(duì)列管理器對象并連接    
    33.              //MQQueueManager可以被多線程共享,但是從MQ獲取信息的時候是同步的,任何時候只有一個線程可以和MQ通信。   
    34.             qMgr = new MQQueueManager(qmName);  
    35.         } catch (MQException e) {  
    36.             // TODO Auto-generated catch block   
    37.             System.out.println("初使化MQ出錯");  
    38.             e.printStackTrace();  
    39.         }   
    40.      }  
    41.      /** 
    42.       * 往MQ發(fā)送消息 
    43.       * @param message 
    44.       * @return 
    45.       */  
    46.      public static int sendMessage(String message){  
    47.          int result=0;  
    48.          try{     
    49.              //設(shè)置將要連接的隊(duì)列屬性   
    50.              // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface    
    51.              //(except for completion code constants and error code constants).   
    52.              //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default.   
    53.              //MQOO_OUTPUT:Open the queue to put messages.   
    54.              /*目標(biāo)為遠(yuǎn)程隊(duì)列,所有這里不可以用MQOO_INPUT_AS_Q_DEF屬性*/  
    55.              //int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;   
    56.              /*以下選項(xiàng)可適合遠(yuǎn)程隊(duì)列與本地隊(duì)列*/  
    57.              int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;  
    58.              //連接隊(duì)列    
    59.              //MQQueue provides inquire, set, put and get operations for WebSphere MQ queues.    
    60.              //The inquire and set capabilities are inherited from MQManagedObject.    
    61.              /*關(guān)閉了就重新打開*/  
    62.             if(qMgr==null || !qMgr.isConnected()){  
    63.                 qMgr = new MQQueueManager(qmName);  
    64.             }  
    65.              MQQueue queue = qMgr.accessQueue(qName, openOptions);            
    66.              //定義一個簡單的消息   
    67.              MQMessage putMessage = new MQMessage();   
    68.              //將數(shù)據(jù)放入消息緩沖區(qū)   
    69.              putMessage.writeUTF(message);    
    70.              //設(shè)置寫入消息的屬性(默認(rèn)屬性)   
    71.              MQPutMessageOptions pmo = new MQPutMessageOptions();             
    72.              //將消息寫入隊(duì)列    
    73.              queue.put(putMessage,pmo);   
    74.              queue.close();  
    75.          }catch (MQException ex) {   
    76.              System.out.println("A WebSphere MQ error occurred : Completion code "   
    77.              + ex.completionCode + " Reason code " + ex.reasonCode);   
    78.              ex.printStackTrace();  
    79.          }catch (IOException ex) {   
    80.              System.out.println("An error occurred whilst writing to the message buffer: " + ex);   
    81.          }catch(Exception ex){  
    82.              ex.printStackTrace();  
    83.          }finally{  
    84.              try {  
    85.                 qMgr.disconnect();  
    86.             } catch (MQException e) {  
    87.                 e.printStackTrace();  
    88.             }  
    89.           }  
    90.          return result;  
    91.      }  
    92.      /** 
    93.       * 從隊(duì)列中去獲取消息,如果隊(duì)列中沒有消息,就會發(fā)生異常,不過沒有關(guān)系,有TRY...CATCH,如果是第三方程序調(diào)用方法,如果無返回則說明無消息 
    94.       * 第三方可以將該方法放于一個無限循環(huán)的while(true){...}之中,不需要設(shè)置等待,因?yàn)樵谠摲椒▋?nèi)部在沒有消息的時候會自動等待。 
    95.       * @return 
    96.       */  
    97.      public static String getMessage(){  
    98.          String message=null;  
    99.          try{              
    100.              //設(shè)置將要連接的隊(duì)列屬性   
    101.              // Note. The MQC interface defines all the constants used by the WebSphere MQ Java programming interface    
    102.              //(except for completion code constants and error code constants).   
    103.              //MQOO_INPUT_AS_Q_DEF:Open the queue to get messages using the queue-defined default.   
    104.              //MQOO_OUTPUT:Open the queue to put messages.   
    105.              int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;  
    106.              MQMessage retrieve = new MQMessage();  
    107.              //設(shè)置取出消息的屬性(默認(rèn)屬性)   
    108.              //Set the put message options.(設(shè)置放置消息選項(xiàng))    
    109.              MQGetMessageOptions gmo = new MQGetMessageOptions();   
    110.              gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;//Get messages under sync point control(在同步點(diǎn)控制下獲取消息)    
    111.              gmo.options = gmo.options + MQC.MQGMO_WAIT;  // Wait if no messages on the Queue(如果在隊(duì)列上沒有消息則等待)    
    112.              gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;// Fail if Qeue Manager Quiescing(如果隊(duì)列管理器停頓則失敗)    
    113.              gmo.waitInterval = 1000 ;  // Sets the time limit for the wait.(設(shè)置等待的毫秒時間限制)    
    114.              /*關(guān)閉了就重新打開*/  
    115.             if(qMgr==null || !qMgr.isConnected()){  
    116.                 qMgr = new MQQueueManager(qmName);  
    117.             }  
    118.              MQQueue queue = qMgr.accessQueue(qName, openOptions);   
    119.              // 從隊(duì)列中取出消息   
    120.              queue.get(retrieve, gmo);  
    121.              message = retrieve.readUTF();    
    122.              System.out.println("The message is: " + message);   
    123.              queue.close();  
    124.          }catch (MQException ex) {   
    125.              System.out.println("A WebSphere MQ error occurred : Completion code "   
    126.              + ex.completionCode + " Reason code " + ex.reasonCode);   
    127.          }catch (IOException ex) {   
    128.              System.out.println("An error occurred whilst writing to the message buffer: " + ex);   
    129.          }catch(Exception ex){  
    130.              ex.printStackTrace();  
    131.          }finally{  
    132.              try {  
    133.                 qMgr.disconnect();  
    134.             } catch (MQException e) {  
    135.                 e.printStackTrace();  
    136.             }  
    137.          }  
    138.          return message;  
    139.      }  
    140.      public static void main(String args[]) {  
    141.          /*下面兩個方法可同時使用,也可以單獨(dú)使用*/  
    142.          sendMessage("this is a test");  
    143.          //getMessage();   
    144.      }  
    145. }  
    posted on 2012-03-04 23:15 fly 閱讀(3997) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲AV久| 亚洲精品无码永久在线观看你懂的| 亚洲国产高清视频| 国产免费无码AV片在线观看不卡| 亚洲欧洲久久av| 一级做a爰片久久毛片免费看| 免费在线观看a级毛片| 四虎国产精品成人免费久久| 亚洲人成影院在线无码观看| 大妹子影视剧在线观看全集免费| 青青草原亚洲视频| 在线涩涩免费观看国产精品| 亚洲视频在线观看免费| 可以免费看黄的网站| 亚洲人片在线观看天堂无码| 四虎免费永久在线播放| 一级特黄aaa大片免费看| 亚洲乱亚洲乱妇无码麻豆| 国产成人精品免费久久久久| 色拍自拍亚洲综合图区| 最近的免费中文字幕视频| 相泽南亚洲一区二区在线播放| 亚洲国产午夜福利在线播放| 你懂的免费在线观看网站| 亚洲人成7777影视在线观看| 日韩伦理片电影在线免费观看| 一级做a爰全过程免费视频毛片| 亚洲人成色777777在线观看 | 国产成人亚洲精品电影| 中文字幕亚洲一区二区三区| 一级毛片免费观看不卡视频| 中文字幕乱码亚洲精品一区| 亚洲AV无码成人精品区大在线| 日本黄色动图免费在线观看| 亚洲成人午夜电影| 亚洲精品A在线观看| 3344永久在线观看视频免费首页| 亚洲AV无码一区二区三区性色| 久久九九亚洲精品| 免费毛片在线播放| 免费人成黄页在线观看日本|