2016-11-17 152 views
3

我嘗試連接使用MQ API來隊列管理器和我能夠連接到隊列管理連接時,隊列管理器JMS

MQQueueManager queueManager=new MQQueueManager(qmgrName); 
queueManager.accessQueue(qName,MQOO_OUTPUT); 

但是,當我嘗試連接到同一個隊列MQ錯誤代碼2058經理用它失敗,2058 code.Not肯定,如果我失去了一些東西與JMS

MQQueueConnectionFactory qcf=new MQQueueConnectionFactory(); 
    qcf.setQueueManager(qmgrName); 
    qcf.setPort(1414); 
    qcf.setHostname("localhost"); 
    qcf.createQueueConnection(); 

回答

1

本地主機上有兩個或更多隊列管理器。在第一個示例中,您以綁定模式進行連接,以便按名稱選擇隊列管理器,並獲得正確的名稱。在第二個示例中,連接是通過客戶端連接進行的,因此由在1414處監聽的QMgr接收,這不是您打算的,因此連接被拒絕。

請注意,如果兩個QMgrs在1414上都有監聽器,則連接將成功或失敗,具體取決於哪個QMgr首先啓動。只有一個可以綁定到該端口,因此第一個啓動的端口可以使用它。這可能會導致看起來不一致的行爲。

請參閱Connection modes for IBM MQ classes for JMS其中建議「要更改JMS使用的IBM MQ類的連接選項,請修改連接工廠屬性CONNOPT。」頁面上提供了可接受的值,但您幾乎總是希望將其設置爲標準綁定(MQCNO_STANDARD_BINDING)。

1

如記錄here JMS,MQRC 2058指的是無效的隊列管理器名稱或隊列管理器名稱是未知的。但正如您所提到的,使用MQ Base Java的綁定模式連接是成功的,隊列管理器名稱顯示爲有效。

更新:

對不起,我被你的代碼誤導,以爲你正在嘗試做使用JMS客戶端模式的連接。您不需要爲綁定模式連接設置主機和端口。

由於未設置傳輸類型,因此使用默認值WMQ_CM_BINDINGS。建議您驗證隊列管理器名稱。

+0

我想連接使用綁定模式只在JMS.But它仍然失敗 –

1

要與「綁定」連接,隊列管理器必須是本地的。您是否嘗試連接到遠程隊列管理器?如果是這樣,你需要連接爲「客戶」。此外,請檢查以確保qmgr正在偵聽您指定的端口。