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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    IBM的WebSphere?MQ產品可以用來方便地實現分布式異構系統之間的消息傳遞。對于大型的分布式系統,使用MQ進行數據通信是可以說是非常有效的,而且適用于異構環境(如NT和多種UNIX之間通信)。本文主要介紹:MQ的核心組件介紹、MQ環境的搭建以及利用JAVA對MQ隊列管理器的操作的程序設計,希望能起到拋磚引玉的作用。
    第一部分、MQ的核心組件介紹
    ??? MQ的核心組件包括:隊列管理器(QueueManager)、隊列(Queue)、通道(Channel)、消息(Message)和集群(Cluster)。
    隊列管理器(QueueManager)提供隊列服務,管理屬于該隊列管理器的隊列和通道等所有MQ對象。
    隊列(Queue)是用于存儲消息(Message)的數據結構,有四種類型:本地隊列(LocalQueue)、遠程隊列(RemoteQueue)、別名隊列(AliasQueue)和模型隊列(ModelQueue),最常用到的是本地隊列和遠程隊列。
    通道(Channel)是提供了從一個隊列管理器到其他隊列管理器的數據傳輸路徑。通道類型有若干種,其中常用的是發送方通道(SenderChannel)和接收方通道(ReceiverChannel)。
    消息(Message)是應用程序之間傳遞的一系列字節數據,MQ傳遞的消息有兩部分組成:消息描述符(MessageDescriptor)和應用數據(ApplicationData)。默認最大傳遞的消息大小是4MB,可以根據需要進行設置,最大可到100MB。
    集群(Cluster)是分布式網絡上的多個隊列管理器的集合。(本文不涉及集群的具體內容)

    第二部分、MQ環境的搭建
    本文搭建的環境以Windows平臺為例,涉及其他平臺的請讀者查閱相關文檔。
    具體搭建步驟:
    1、根據安裝向導安裝IBM?WebSphere?MQ?v5.3軟件,安裝路徑為:D:\IBM\WebSphere?MQ。

    2、安裝成功后,請使用命令echo?%classpath%檢查classpath變量中是否已經把D:\IBM\WebSphere?MQ\Java\lib下面的jar文件包含進來,如沒有包括請進行手工添加,本文要用到的2個關鍵的是:com.ibm.mq.jar和connector.jar。使用echo?%path%檢查path變量中是否已經把D:\IBM\WebSphere?MQ\bin包含進來,如沒有包括請進行手工添加。

    3、創建一個配置文本文件,文件名為config.txt,內容如下(請讀者到附件下載):
    *?更改QM的字符集編碼(CCSID)
    ????ALTER?QMGR?FORCE?CCSID(1381)
    *?定義本地隊列
    ????DEFINE?QLOCAL('LQ_SAMPLE')?REPLACE?+
    ???????USAGE(normal)?+
    ???????DEFPSIST(YES)?

    4、創建一個批處理文件,文件名為mqsetup.bat,內容如下(請讀者到附件下載):
    rem?創建缺省隊列管理器,擁有100個句柄,使用線性循環日志,容量為?1024?×?4?K/文件,主文件10個,輔文件20個
    echo?Creating?QM_SAMPLE?
    crtmqm?-t?5000?-h?100?-lc?-lf?1024?-lp?10?-ls?20?-q?QM_SAMPLE
    rem?設置cpu個數為1
    setmqcap?1
    rem?啟動隊列管理器
    echo?Starting?Queue?Manager
    strmqm?QM_SAMPLE
    rem?從配置文件中讀入初始化命令
    echo?Running?config?
    runmqsc?QM_SAMPLE?<?config.txt
    rem?停止隊列管理器
    amqmdain?end?QM_SAMPLE
    rem?將隊列管理器設置為自動啟動
    amqmdain?auto?QM_SAMPLE
    rem?創建隊列偵聽器,使用1414端口
    amqmdain?crtlsr?QM_SAMPLE?-t?TCP?-p?1414
    rem?修改MQ參數,采用AdoptNewMCA方式
    amqmdain?reg?QM_SAMPLE?-c?add?-s?Channels?-v?AdoptNewMCA=ALL
    rem?修改MQ參數,采用KeepAlive方式
    amqmdain?reg?QM_SAMPLE?-c?add?-s?TCP?-v?KeepAlive=Yes
    rem?重新啟動隊列管理器
    amqmdain?start?QM_SAMPLE

    5、運行mqsetup.bat,檢查運行結果輸出是否無誤,如有錯誤,請仔細根據上述步驟進行檢查并糾錯。

    6、在命令窗口中,輸入dspmq,看是否顯示如下結果:
    QMNAME(QM_SAMPLE)???????????????????????????????????STATUS(正在運行)

    7、在命令窗口中,輸入runmqsc回車,進入mq交互操作環境,輸入display?queue(LQ_SAMPLE),看是否顯示如下結果:
    AMQ8409:?顯示隊列細節。
    ???DESCR(WebSphere?MQ?Default?Local?Queue)
    ???PROCESS(?)??????????????????????????????BOQNAME(?)
    ???INITQ(?)????????????????????????????????TRIGDATA(?)
    ???CLUSTER(?)??????????????????????????????CLUSNL(?)
    ???QUEUE(LQ_SAMPLE)????????????????????????CRDATE(2006-10-31)
    ???CRTIME(16.17.01)????????????????????????ALTDATE(2006-10-31)

    8、輸入end退出mq交互操作環境。
    自此,NT平臺上的最基本的MQ環境搭建完成了。
    第三部分、利用JAVA對MQ隊列管理器的操作的程序設計
    本文涉及的程序在JDK?1.4.2上測試通過。文件名為MQSample.java,程序內容如下:
    import?java.io.IOException;
    import?com.ibm.mq.MQC;
    import?com.ibm.mq.MQException;
    import?com.ibm.mq.MQGetMessageOptions;
    import?com.ibm.mq.MQMessage;
    import?com.ibm.mq.MQPutMessageOptions;
    import?com.ibm.mq.MQQueue;
    import?com.ibm.mq.MQQueueManager;

    public?class?MQSample{
    ????//定義隊列管理器和隊列的名稱
    ????private?static?String?qmName;?
    ????private?static?String?qName;
    ????
    ????public?static?void?main(String?args[])?{
    ????????try{
    ????????????//第一個參數是隊列管理器名,第二個參數是隊列名
    ????????????qmName?=?args[0].trim();
    ????????????qName?=?args[1].trim();
    ????????}catch(Exception?e){
    ????????????System.out.println("USAGE:?java?MQSample?隊列管理器名?隊列名");
    ????????????System.exit(0);
    ????????}
    ????????
    ????????try?{
    ????????????//定義并初始化隊列管理器對象并連接?
    ????????????MQQueueManager?qMgr?=?new?MQQueueManager(qmName);?

    ????????????//?設置將要連接的隊列屬性
    ????????????//?Note.?All?WebSphere?MQ?Options?are?prefixed?with?MQC?in?Java.?
    ????????????int?openOptions?=?MQC.MQOO_INPUT_AS_Q_DEF?|?MQC.MQOO_OUTPUT;?

    ????????????//連接隊列?
    ????????????MQQueue?localQ?=?qMgr.accessQueue(qName,?openOptions);?
    ????????????
    ????????????//定義一個簡單的消息
    ????????????MQMessage?putMessage?=?new?MQMessage();?
    ????????????putMessage.writeUTF("Hello?World!");?

    ????????????//設置寫入消息的屬性(默認屬性)
    ????????????MQPutMessageOptions?pmo?=?new?MQPutMessageOptions();?
    ????????????
    ????????????//將消息寫入隊列?
    ????????????localQ.put(putMessage,pmo);?
    ????????????????????????
    ????????????MQMessage?retrievedMessage?=?new?MQMessage();
    ????????????retrievedMessage.messageId?=?putMessage.messageId;?

    ????????????//設置取出消息的屬性(默認屬性)
    ????????????MQGetMessageOptions?gmo?=?new?MQGetMessageOptions();?

    ????????????//?從隊列中取出消息
    ????????????localQ.get(retrievedMessage,?gmo);?
    ????????????String?msgText?=?retrievedMessage.readUTF();

    ????????????System.out.println("The?message?is:?"?+?msgText);?

    ????????????//關閉隊列
    ????????????localQ.close();?
    ????????????//從隊列管理器斷開?
    ????????????qMgr.disconnect();?
    ????????}catch?(MQException?ex)?{?
    ????????????System.out.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"?
    ????????????+?ex.completionCode?+?"?Reason?code?"?+?ex.reasonCode);?
    ????????}catch?(IOException?ex)?{?
    ????????????System.out.println("An?error?occurred?whilst?writing?to?the?message?buffer:?"?+?ex);?
    ????????}catch(Exception?ex){
    ????????????ex.printStackTrace();
    ????????}
    ????}
    }
    以上程序接受2個輸入參數,第一個參數是隊列管理器名,第二個參數是隊列名。首先初始化MQQueueManager對象,以隊列管理器的名稱作為參數。這里用的是最簡單的MQQueueManager,只能連接本機的隊列管理器。推薦使用MQQueueManager(String?qmName,?Hashtable?hashtable)構造函數,如下:
    private?static?Hashtable?properties?=?new?Hashtable();
    properties.put("hostname",?"主機名");
    properties.put("port",?new?Integer(1414));
    ......
    MQQueueManager?qMgr?=?new?MQQueueManager(qmName,properties);?
    可以使應用程序訪問MQ服務器的特定端口。
    然后通過QueueManager的accessQueue()方法連接隊列,該方法返回MQQueue對象。然后定義了MQMessage對象,通過writeUTF()將字符串寫入消息,進而通過MQQueue的put()方法將消息放入隊列中,然后通過get()方法取出消息,最后顯示在console上。在程序結尾,執行MQQueue的close()方法關閉隊列,執行MQQueueManager的disconnect()斷開和隊列管理器的連接。

    對MQSample.java編譯后,輸入java?MQSample?QM_SAMPLE?LQ_SAMPLE運行,得出如下結果:
    The?message?is:?Hello?World!

    在作者調試以上程序時,出現了一個錯誤:java.lang.NoClassDefFoundError:?javax/resource/ResourceException
    經過在IBM網站上進行搜索,說是classpath中沒有指定connector.jar文件,但是我已經在Eclipse開發環境中進行設置。
    通過仔細分析,終于發現是由于JDK的緣故(我用的是WebSphere6.0里的JDK),切換到SUN的JDK就正常了。
    所以,如果你需要使用IBM的JDK的話,那么要把MQ的這幾個包覆蓋到IBM?JDK的相關路徑下。

    到此,讀者應該了解了MQ有哪些主要的對象,環境怎么搭建(請仔細研究config.txt和mqsetup.bat文件),以及如何對MQ的對象進行操作。
    如果讀者對以上的內容有任何疑問,可以和我聯系,qianh@cntmi.com?
    posted on 2006-12-15 15:44 蘆葦 閱讀(1345) 評論(0)  編輯  收藏 所屬分類: JAVA其他
    主站蜘蛛池模板: 成人在线视频免费| 四虎亚洲精品高清在线观看| 免费无码看av的网站| 99re6热视频精品免费观看| 污视频网站免费在线观看| 大地资源在线资源免费观看| 狠狠综合亚洲综合亚洲色| 亚洲黄色激情视频| 久久青青草原亚洲av无码app | 久久国产亚洲精品无码| 4338×亚洲全国最大色成网站| 嫩草影院在线免费观看| 国产92成人精品视频免费| 久久黄色免费网站| 亚洲一区综合在线播放| 亚洲情综合五月天| 不卡一卡二卡三亚洲| 亚洲国产av无码精品| 国产乱子伦片免费观看中字| 中文字幕免费观看全部电影| 免费人成动漫在线播放r18| 亚洲成aⅴ人片久青草影院按摩| 国产亚洲精品久久久久秋霞| 亚洲AV无码乱码精品国产| 国产福利免费观看| 四虎永久在线精品免费影视| 暖暖免费高清日本一区二区三区| 日韩吃奶摸下AA片免费观看 | 亚洲性在线看高清h片| 成人亚洲网站www在线观看| 国产大片91精品免费看3| 国产无遮挡吃胸膜奶免费看视频 | 亚洲成av人片在线天堂无| 亚洲人成人网毛片在线播放| 激情综合亚洲色婷婷五月 | 麻豆国产人免费人成免费视频| 成人毛片免费观看| 日本无卡码免费一区二区三区| 色吊丝永久在线观看最新免费| 日本高清免费不卡在线| 日韩亚洲国产综合久久久|