簡體   English   中英

無法從Windows中的java連接到MQ

[英]can't connect to MQ from java in windows

我在Windows 8中安裝了Websphere MQ 8服務器,

使用MQ Explorer:我使用端口1419創建了一個隊列管理器MAJID.QUEUE.MANAGER 我在端口1419上創建了一個TCP偵聽器。

我嘗試了一個從MQ8安裝Tools的java程序,它運行如下:

 PCF_ListQueueNames  MAJID.QUEUE.MANAGER 10.196.67.99 1419

但我只得到:

 Completion Code '2', Reason '2035'.

更新:

日志文件說:

AMQ9777: Channel was blocked

 EXPLANATION:
 The inbound channel 'SYSTEM.DEF.SVRCONN' was blocked from address 'ITD-     968735
 (192.168.56.1)' because the active values of the channel matched a record
  configured with USERSRC(NOACCESS). The active values of the channel were
  'CLNTUSER(alotfi) ADDRESS(ITD-968735)'.
  ACTION:
  Contact the systems administrator, who should examine the channel
  authentication records to ensure that the correct settings have been
  configured. The ALTER QMGR CHLAUTH switch is used to control whether  channel
  authentication records are used. The command DISPLAY CHLAUTH can be used  to
  query the channel authentication records. 
  ----- cmqxrmsa.c : 1461 -------------------------------------------------------
  1/13/2016 15:55:13 - Process(9988.27) User(MUSR_MQADMIN) Program(amqrmppa.exe)
                  Host(ITD-968735) Installation(Installation1)
                  VRMF(8.0.0.4) QMgr(MAJID.QUEUE.MANAGER)

    AMQ9999: Channel 'SYSTEM.DEF.SVRCONN' to host '192.168.56.1' ended abnormally.

   EXPLANATION:
   The channel program running under process ID 9988(8292) for channel
   'SYSTEM.DEF.SVRCONN' ended abnormally. The host name is '192.168.56.1'; in some
   cases the host name cannot be determined and so is shown as '????'.

有一篇很棒的MQ安全博客文章描述了如何配置MQ以讓客戶端安全連接(即不僅僅關閉安全功能)。

但是,為了解決您的特定問題,新MQ 8隊列管理器的默認通道身份驗證規則會阻止客戶端通過SYSTEM。*通道連接到隊列管理器。 如果在新的MQ 8隊列管理器上運行DIS CHLAUTH(*) ALL ,您將看到:

DIS CHLAUTH(*) ALL
     2 : DIS CHLAUTH(*) ALL
AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.ADMIN.SVRCONN)           TYPE(ADDRESSMAP)
   DESCR(Default rule to allow MQ Explorer access)
   CUSTOM( )                               ADDRESS(*)
   USERSRC(CHANNEL)                        CHCKCLNT(ASQMGR)
   ALTDATE(2016-01-14)                     ALTTIME(16.15.20)
AMQ8878: Display channel authentication record details.
   CHLAUTH(SYSTEM.*)                       TYPE(ADDRESSMAP)
   DESCR(Default rule to disable all SYSTEM channels)
   CUSTOM( )                               ADDRESS(*)
   USERSRC(NOACCESS)                       WARN(NO)
   ALTDATE(2016-01-14)                     ALTTIME(16.15.20)
AMQ8878: Display channel authentication record details.
   CHLAUTH(*)                              TYPE(BLOCKUSER)
   DESCR(Default rule to disallow privileged users)
   CUSTOM( )                               USERLIST(*MQADMIN)
   WARN(NO)                                ALTDATE(2016-01-14)
   ALTTIME(16.15.20)

第二個規則阻止所有客戶端連接到名為SYSTEM。*的通道。 這適用於您,因為您正在連接到SYSTEM.DEF.SVRCONN。

您可能希望為應用程序定義新的SVRCONN通道以連接並使用它而不是SYSTEM.DEF.SVRCONN。

定義新通道時,MQ安全性最佳做法是將通道的MCAUSER字段設置為不存在的用戶 - 例如“nobody”。 然后,您可以定義新的通道身份驗證規則,該規則允許您的Java應用程序采用您選擇的用戶ID,而不是默認用戶“nobody”。 例如,該規則可以是ADDRESSMAP規則,該規則允許從特定IP地址連接的任何客戶端連接到新通道並采用您選擇的用戶ID。

綜上所述:

1)選擇系統中存在的有效用戶(但不在'mqm'組中)

2)定義一個新的非SYSTEM通道,MCAUSER設置為'nobody',例如

DEFINE CHANNEL(MY.FIRST.CHANNEL) CHLTYPE(SVRCONN) MCAUSER('nobody')

3)定義一個新的通道驗證規則,允許從客戶端的IP地址進行連接,並采用您已定義的用戶,例如

SET CHLAUTH(MY.FIRST.CHANNEL) TYPE(ADDRESSMAP) ADDRESS('192.168.56.1') USERSRC(MAP) MCAUSER('validuser') ACTION(REPLACE)

您還需要執行一個步驟。 您需要告訴MQ,允許'validuser'連接,放置和/或獲取消息。 您可以使用SET AUTHREC來定義客戶端應具有的權限。 有關有效的AUTHREC選項,請參閱知識中心。

以上是如何配置MQ以讓客戶端連接的示例。 您應該使用我鏈接到的知識庫和知識中心等博客文章的組合來按照需要的方式設置您的安全性。 例如,您可能希望使用TLS證書來驗證您在上面沒有描述的Java客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM