IBM MQ 使用一例
生活随笔
收集整理的這篇文章主要介紹了
IBM MQ 使用一例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MQ作為一種中間件還是不錯的,可以由一個系統發送一些消息給MQ Server,然后另外一個系統來取得這些消息。比較方便的實現不同系統、不同語言間的通信。
MQ Server可以進行消息的排隊、緩存等。
具體MQ Server的配置我就不介紹了,可以去IBM的網站下載一個試用版試試看。
下面是一個收發的簡單的小例子,具體意思看里面的注釋。
import?com.ibm.mq.MQC;
import?com.ibm.mq.MQEnvironment;
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;
/**//*
?*?可以在MQ的資源管理器的某一個隊列上放入測試消息、瀏覽消息等
?*?可以放入多條消息,按先進先出的方式取得
?*/
public?class?MQTest?{
????
????private?String?qManager;//?QueueManager名
????private?MQQueueManager?qMgr;
????private?MQQueue?qQueue;
????
????String?HOST_NAME;
????
????int?PORT=0;
????String?Q_NAME;
????
????String?CHANNEL;
????
????int?CCSID;
????
????String?Msg;
????
????public?void?init(){
????????????
????????try?{
????????????HOST_NAME="192.168.88.169";
????????????PORT=1414;
????????????qManager="QM_yfgaochun";
????????????Q_NAME="QM_NAME1";
????????????CHANNEL="S_yfgaochun";
????????????CCSID=1381;?//表示是簡體中文,?CCSID的值在AIX上一般設為1383,如果要支持GBK則設為1386,在WIN上設為1381。
????????????
????????????Msg?=?"MQ測試發送Gao";
????????????//System.out.println(Msg);
????????????
????????????MQEnvironment.hostname?=?HOST_NAME;?//安裝MQ所在的ip?address
????????????MQEnvironment.port=PORT;?//?TCP/IP?port
????????????
????????????MQEnvironment.channel=CHANNEL;
????????????MQEnvironment.CCSID=CCSID;
????????????
????????????qMgr?=?new?MQQueueManager(qManager);
????????????
/**//*????????????try?{
????????????????XADataSource?ds?=?null;
????????????????Connection?con?=?(Connection)qMgr.getJDBCConnection(ds);
????????????}?catch?(SQLException?e)?{
????????????????e.printStackTrace();
????????????}?catch?(Exception?e)?{
????????????????e.printStackTrace();
????????????}*/
????????????
????????????//int?qOptioin?=?MQC.MQOO_INQUIRE?|?MQC.MQOO_OUTPUT;?發送時使用
????????????//int?qOptioin?=?MQC.MQOO_INPUT_AS_Q_DEF?|?MQC.MQOO_OUTPUT;?接收時使用
????????????int?qOptioin?=?MQC.MQOO_INPUT_AS_Q_DEF?|?MQC.MQOO_INQUIRE?|?MQC.MQOO_OUTPUT;
????????????qQueue?=?qMgr.accessQueue(Q_NAME,?qOptioin);
????????????
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}?
????}
????
????void?finalizer()?{
????????try?{
????????????qQueue.close();
????????????qMgr.disconnect();
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}
????}
????/**//*
?????*?取過一次,下次就沒有了
?????*/
????public?void?GetMsg()?{
????????try?{
????????????MQMessage?retrievedMessage?=?new?MQMessage();
????????????MQGetMessageOptions?gmo?=?new?MQGetMessageOptions();
????????????gmo.options?+=?MQC.MQPMO_SYNCPOINT;
????????????qQueue.get(retrievedMessage,?gmo);
????????????int?length?=?retrievedMessage.getDataLength();
????????????byte[]?msg?=?new?byte[length];
????????????retrievedMessage.readFully(msg);
????????????String?sMsg?=?new?String(msg);
????????????System.out.println(sMsg);
????????}catch?(RuntimeException?e){?
????????????e.printStackTrace();
????????}catch?(MQException?e)?{
????????????if?(e.reasonCode?!=?2033)?//沒有消息
????????????{
????????????????e.printStackTrace();
????????????????System.out
????????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????????+?e.completionCode
????????????????????????????????+?"?Reason?Code?is?"
????????????????????????????????+?e.reasonCode);
????????????}
????????}?catch?(java.io.IOException?e)?{
????????????System.out
????????????????????.println("An?error?occurred?whilst?to?the?message?buffer?"
????????????????????????????+?e);
????????}
????}
????
????public?void?SendMsg(byte[]?qByte)?{
????????try?{
????????????MQMessage?qMsg?=?new?MQMessage();
????????????qMsg.write(qByte);
????????????MQPutMessageOptions?pmo?=?new?MQPutMessageOptions();
????????????
????????????qQueue.put(qMsg,?pmo);
????????????System.out.println("The?message?is?sent!");
????????????System.out.println("\tThe?message?is?"?+?new?String(qByte,"GBK"));
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}?catch?(java.io.IOException?e)?{
????????????System.out
????????????????????.println("An?error?occurred?whilst?to?the?message?buffer?"
????????????????????????????+?e);
????????}
????}
????/**?*//**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????MQTest?mqst?=?new?MQTest();????????
????????mqst.init();
????????try?{
????????????mqst.SendMsg(mqst.Msg.getBytes("GBK"));
????????????//mqst.GetMsg();
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????????mqst.finalizer();
????}
}
MQ Server可以進行消息的排隊、緩存等。
具體MQ Server的配置我就不介紹了,可以去IBM的網站下載一個試用版試試看。
下面是一個收發的簡單的小例子,具體意思看里面的注釋。
import?com.ibm.mq.MQC;
import?com.ibm.mq.MQEnvironment;
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;
/**//*
?*?可以在MQ的資源管理器的某一個隊列上放入測試消息、瀏覽消息等
?*?可以放入多條消息,按先進先出的方式取得
?*/
public?class?MQTest?{
????
????private?String?qManager;//?QueueManager名
????private?MQQueueManager?qMgr;
????private?MQQueue?qQueue;
????
????String?HOST_NAME;
????
????int?PORT=0;
????String?Q_NAME;
????
????String?CHANNEL;
????
????int?CCSID;
????
????String?Msg;
????
????public?void?init(){
????????????
????????try?{
????????????HOST_NAME="192.168.88.169";
????????????PORT=1414;
????????????qManager="QM_yfgaochun";
????????????Q_NAME="QM_NAME1";
????????????CHANNEL="S_yfgaochun";
????????????CCSID=1381;?//表示是簡體中文,?CCSID的值在AIX上一般設為1383,如果要支持GBK則設為1386,在WIN上設為1381。
????????????
????????????Msg?=?"MQ測試發送Gao";
????????????//System.out.println(Msg);
????????????
????????????MQEnvironment.hostname?=?HOST_NAME;?//安裝MQ所在的ip?address
????????????MQEnvironment.port=PORT;?//?TCP/IP?port
????????????
????????????MQEnvironment.channel=CHANNEL;
????????????MQEnvironment.CCSID=CCSID;
????????????
????????????qMgr?=?new?MQQueueManager(qManager);
????????????
/**//*????????????try?{
????????????????XADataSource?ds?=?null;
????????????????Connection?con?=?(Connection)qMgr.getJDBCConnection(ds);
????????????}?catch?(SQLException?e)?{
????????????????e.printStackTrace();
????????????}?catch?(Exception?e)?{
????????????????e.printStackTrace();
????????????}*/
????????????
????????????//int?qOptioin?=?MQC.MQOO_INQUIRE?|?MQC.MQOO_OUTPUT;?發送時使用
????????????//int?qOptioin?=?MQC.MQOO_INPUT_AS_Q_DEF?|?MQC.MQOO_OUTPUT;?接收時使用
????????????int?qOptioin?=?MQC.MQOO_INPUT_AS_Q_DEF?|?MQC.MQOO_INQUIRE?|?MQC.MQOO_OUTPUT;
????????????qQueue?=?qMgr.accessQueue(Q_NAME,?qOptioin);
????????????
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}?
????}
????
????void?finalizer()?{
????????try?{
????????????qQueue.close();
????????????qMgr.disconnect();
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}
????}
????/**//*
?????*?取過一次,下次就沒有了
?????*/
????public?void?GetMsg()?{
????????try?{
????????????MQMessage?retrievedMessage?=?new?MQMessage();
????????????MQGetMessageOptions?gmo?=?new?MQGetMessageOptions();
????????????gmo.options?+=?MQC.MQPMO_SYNCPOINT;
????????????qQueue.get(retrievedMessage,?gmo);
????????????int?length?=?retrievedMessage.getDataLength();
????????????byte[]?msg?=?new?byte[length];
????????????retrievedMessage.readFully(msg);
????????????String?sMsg?=?new?String(msg);
????????????System.out.println(sMsg);
????????}catch?(RuntimeException?e){?
????????????e.printStackTrace();
????????}catch?(MQException?e)?{
????????????if?(e.reasonCode?!=?2033)?//沒有消息
????????????{
????????????????e.printStackTrace();
????????????????System.out
????????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????????+?e.completionCode
????????????????????????????????+?"?Reason?Code?is?"
????????????????????????????????+?e.reasonCode);
????????????}
????????}?catch?(java.io.IOException?e)?{
????????????System.out
????????????????????.println("An?error?occurred?whilst?to?the?message?buffer?"
????????????????????????????+?e);
????????}
????}
????
????public?void?SendMsg(byte[]?qByte)?{
????????try?{
????????????MQMessage?qMsg?=?new?MQMessage();
????????????qMsg.write(qByte);
????????????MQPutMessageOptions?pmo?=?new?MQPutMessageOptions();
????????????
????????????qQueue.put(qMsg,?pmo);
????????????System.out.println("The?message?is?sent!");
????????????System.out.println("\tThe?message?is?"?+?new?String(qByte,"GBK"));
????????}?catch?(MQException?e)?{
????????????System.out
????????????????????.println("A?WebSphere?MQ?error?occurred?:?Completion?code?"
????????????????????????????+?e.completionCode?+?"?Reason?Code?is?"
????????????????????????????+?e.reasonCode);
????????}?catch?(java.io.IOException?e)?{
????????????System.out
????????????????????.println("An?error?occurred?whilst?to?the?message?buffer?"
????????????????????????????+?e);
????????}
????}
????/**?*//**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????MQTest?mqst?=?new?MQTest();????????
????????mqst.init();
????????try?{
????????????mqst.SendMsg(mqst.Msg.getBytes("GBK"));
????????????//mqst.GetMsg();
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????????mqst.finalizer();
????}
}
總結
以上是生活随笔為你收集整理的IBM MQ 使用一例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Yahoo! UI Library入门
- 下一篇: TabStrip within ASP.