2013-09-26 116 views
0

Java對象我有兩個問題:取從MQ隊列

  1. 我想知道是否有任何可用的工具來獲取一個Java對象投進MQ。如果可以,請提供代碼片段以從mqqueue獲取Java對象消息。

  2. 是否可以不從隊列中刪除消息,而是讀取最新的消息。就像運行代碼時它應該讀取隊列中最新的消息。

請讓我知道是否有困難瞭解上述查詢。

+0

第二個查詢很清楚,但第一個查詢不是。通過在隊列中放置「java對象」是什麼意思?你在談論什麼java對象?我們只在隊列中放置消息,可以是任何形式的文本或二進制文件。 – nitgeek

回答

0

關於你提到的第二個查詢

是的,我們可以看到在隊列中的最新消息而不從隊列中刪除。我們稱之爲瀏覽消息

你將不得不使用一些消息得到選項,如MQGMO_BROWSE_FIRST

。在與GMO發佈MQGET MQGMO_BROWSE_FIRST之後,我們需要向GMO發佈MQGET,MQGMO_BROWSE_NEXT。我們將不得不循環發佈這些MQGET,直到我們到達最後一條消息。

一切都清楚了說明: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r1/index.jsp?topic=%2Fcom.ibm.mq.doc%2Ffr12610_.htm

其實,它本來就簡單得多了,如果MQ API可以提供類似MQGMO_BROWSE_LAST。 但仍然沒問題,畢竟我們稱之爲隊列(FIFO),而不是堆棧(LIFO)。

關於你的第一個查詢

我從中明白的是,你要放在一個Java類對象在隊列中。那麼,正如我所評論的那樣,我們只將消息放入隊列中。無論您是將文本消息還是二進制消息,MQ都足夠靈活,可以同時接受這兩種消息。現在,它取決於應用程序如何處理消息中的二進制或文本信息。

所以,這是真的在你的實施。我想如下實現它:

發送方: 假設我們有一個對象ObjToBeSent,其作爲變量的狀態:

ObjToBeSent.Vara=1; 
ObjToBeSent.Varb="test"; 

我將形成一個XML消息像下面,將發佈在隊列:

<ObjToBeSent> 
<Vara><Integer>1</Integer></Vara> 
<Varb><String>test</String></varb> 
</ObjToBeSent> 

接收方: 從隊列中獲取消息。解析XML並獲取變量的值以及數據類型。

聲明一個對象say,ObjectReceived,並設置輸入消息中變量的值。

+0

感謝您關注此事。建議第二個查詢工作。關於第一個查詢,消息被寫爲序列化的java對象,我們需要反序列化並將其作爲字符串讀取。你可以請建議任何java jms api或ibm mq api。還可以通過代碼片段執行上述操作 – user2817011