2011-07-05 47 views
5

我正在嘗試編寫一個連接到隊列管理器的小應用程序,並在它上面發出一些Java命令。WebSphere MQ:如何使用Java API發佈MQSC命令?

從我在文檔中讀到的內容中瞭解到,必須通過在「SYSTEM.ADMIN.COMMAND.QUEUE」隊列中發送命令來發出命令。

但是,執行後,由replyToQueueName定義的應答隊列仍爲空。

有什麼我錯過了嗎?

下面是代碼的精簡版本:

MQQueueManager qMgr = new MQQueueManager("SOME_HOSTNAME"); 

MQQueue qOut = qMgr.accessQueue("SYSTEM.ADMIN.COMMAND.QUEUE", MQC.MQOO_OUTPUT); 
MQQueue qIn = qMgr.accessQueue("SYSTEM.DEFAULT.LOCAL.QUEUE", MQC.MQOO_INPUT_AS_Q_DEF); 

MQMessage message = new MQMessage(); 
message.writeUTF("DISPLAY QMGR ALL"); 
message.messageType = MQC.MQMT_REQUEST; 
message.format = MQC.MQFMT_STRING; 
message.replyToQueueName = "SYSTEM.DEFAULT.LOCAL.QUEUE"; 

qOut.put(message, new MQPutMessageOptions()); 

MQMessage retrievedMessage = new MQMessage(); 
MQGetMessageOptions gmo = new MQGetMessageOptions(); 
gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT; 

qIn.get(retrievedMessage, gmo); 

回答

4

命令處理器希望接收在可編程命令格式(PCF)格式的消息。請參閱com.ibm.mq.pcf類和Programmable Command Formats and Administration Interface手冊。

根據您使用的MQ客戶端的版本,您可能需要從SupportPac MS0B下載PCF Java類。但是,強烈建議使用最新的MQ客戶端進行開發。當前客戶端將始終使用早期的WMQ服務器版本V7,並回退到這些平臺上可用的功能級別。這確保至少支持您的客戶端類,而V5.3或V6等較早版本則不支持。

V7.0 MQ客戶端可用作爲SupportPac MQC7
V7.5 MQ客戶端以SupportPac MQC75提供。
V8.0 MQ客戶端可用作爲SupportPac MQC80

+0

API是否已從版本6更改爲版本7?我見過一些例子,比如這個http://www.mqseries.net/phpBB2/viewtopic.php?t=15159,其中命令是作爲簡單的消息字符串發佈的。 – slaphappy

+1

對於更新的讀者,請注意z/OS現在支持PCF。自V6以來已經完成。此外,封裝的MQSC命令(也稱爲Escape PCF)不會在z/OS上受支持。將MQSC命令發送到z/OS時,它們未被封裝,只是將字符串直接放在隊列中。 –

+0

感謝您的更正,@Morag。很高興有你在這裏! –