1. 程式人生 > >WebsphereMQ V8 解決客戶機連線報2035錯誤碼

WebsphereMQ V8 解決客戶機連線報2035錯誤碼

應用程式與MQ伺服器端的連線模式有兩種:本地繫結客戶機連線。本地繫結模式僅適用於應用程式和MQ伺服器執行在同一臺機器上,而客戶機連線模式則沒有此限制,可用於兩者執行在不同機器或同一臺機器上。不過當應用程式和和MQ 伺服器運行於同一臺機器上時,一般推薦使用本地繫結模式,該模式下兩者通過程序間通訊 (IPC) 協議進行通訊,傳輸效率較高,且不受網路狀況影響。

  • 本地繫結模式配置比較簡單,一般情況下,只要在應用程式中提供佇列管理器名稱,即可連線到本地MQ伺服器上的佇列管理器上,不需要提供MQ伺服器主機名,監聽埠和伺服器連線通道名稱。
  • 客戶機連線模式比本地繫結模式配置稍微複雜,需要在MQ伺服器中建立伺服器連線通道,注意此處的通道型別為伺服器連線通道,該通道名稱需要在應用程式中配置,比如配置在MQEnvironment.channel
    屬性中,此外,還需要配置佇列管理器所在的主機名,監聽埠。

本地繫結模式的連線一般不會出什麼問題,而在客戶機連線模式時可能出現MQRC_NOT_AUTHORIZED - 2035錯誤,解決這個問題需要注意以下幾點。

  1. 佇列管理器是否開啟通道認證記錄。通道認證記錄用來允許或阻止客戶端應用程式對MQ佇列管理器的連線,如果開啟了,則需要保證當前的通道認證記錄中的配置項允許你的應用程式通過你選定的伺服器連線通道進行連線。常見的認證規則可以通過使用者名稱、IP地址等進行允許或阻止連線的控制,具體的配置方法這裡不作詳述,需要注意的是佇列管理器內建的系統物件,包括各種通道和通道認證記錄,可以通過下圖所示方式在MQ Explorer檢視。如果你使用的是佇列管理器內建的伺服器連線通道,比如SYSTEM.DEF.SVRCONN

    ,則需要考慮內建的通道認證記錄,比如預設的SYSTEM.* 配置禁用了所有的系統通道,可以將該配置項刪除,也可以修改該配置項。
    佇列管理器內建的各種系統通道:
    佇列管理器內建的各種系統通道
    佇列管理器內建的通道認證記錄:
    佇列管理器內建的通道認證記錄
    關於通道認證記錄所造成的訪問問題,最簡單直接的方式便是將通道認證記錄功能關閉,不過這樣也就失去了對客戶應用程式的連線授權控制。可以通過命令列指令關閉通道認證記錄:

    RUNMQSC 佇列管理器名稱
    ALTER QMGR CHLAUTH(DISABLED)

    也可以通過MQ Explorer關閉:

  2. 注意伺服器連線通道的MCAUSER(MCA使用者標識)屬性。該屬性表示通過該通道連線的應用程式在和佇列管理器進行通訊時所使用的使用者名稱稱,其值必須為MQ伺服器上的mqm

    組內的使用者,否則便會出現2035錯誤。需要注意,如果MCAUSER為空,則使用執行MQ應用程式所在的作業系統上的使用者名稱稱;如果MCAUSER不為空,則使用該值作為應用程式連線通道時使用的使用者名稱稱。

    可以通過命令列指令修改:

    RUNMQSC 佇列管理器名稱
    ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('指定的使用者標識')
  3. 網上很多資料關於解決2035錯誤的方法都是對於Websphere MQ V7.x 的,我使用的是V8.0,使用網上的解決方法仍然會報2035錯誤,後來發現在V8.0中需要多注意一個配置才能解決2035錯誤。參考:
    http://stackoverflow.com/questions/25911557/websphere-mq-v8-mqrc-not-authorized-2035
    在V8中,與伺服器的連線預設需要密碼去認證,可以通過配置佇列管理器的連線認證選項來解決。
    通過以下命令列指令,將連線認證選項中的SYSTEM.DEFAULT.AUTHINFO.IDPWOS的屬性配置為OPTIONAL
    ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
    或者直接將連線認證選項置為空,將其完全關閉,指令如下:
    ALTER QMGR CONNAUTH('')
    在執行完上述兩條命令中的任一條後,都需要重新整理連線認證的快取,指令如下:
    REFRESH SECURITY TYPE(CONNAUTH)
    也可以通過MQ Explorer關閉連線認證,如下圖,在佇列管理器的擴充套件屬性中將連線認證一欄置為空即可:

通過以上注意點,一般可以解決連線MQ伺服器的2035錯誤。