【问题标题】:Simple java program gets RC=2009 connecting to remote Queue Manager简单的 java 程序获取 RC=2009 连接到远程队列管理器
【发布时间】:2012-04-27 22:26:34
【问题描述】:

我正在编写一个简单的 java 程序来连接到远程 WebSphere MQ 队列管理器,但它显示错误:MQJE001: Completion Code '2', Reason '2009'

然而,当我使用 WMQ Explorer 进行连接时,它会连接起来,我可以在那里看到队列中的消息。请帮忙。我的代码是:

        public void init(){

     props.put(MQC.HOST_NAME_PROPERTY, "sailmq3d.pok.ibm.com");
     props.put(MQC.CHANNEL_PROPERTY, "PLM.SECURE.SVRCONN");
     props.put(MQC.PORT_PROPERTY, 1423); // port number
     props.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
     }

       public void start(){
   try {
  // Create a connection to the queue manager
qMgr = new MQQueueManager("PLMESB_SBMD2",props);

【问题讨论】:

  • PLM.SECURE.SVRCONN 的通道定义是什么样的? “安全”是否意味着它启用了 SSL?和 WMQ Explorer 使用的是同一个频道吗?
  • @Rob: 你能帮忙看看这里出了什么问题
  • 它是用于连接到远程 MQ 队列管理器的简单连接,并且我可以在 MQExplorer 中使用相同的通道进行连接

标签: ibm-mq


【解决方案1】:

哇,这有点酷 - 有一次我可以真正看到来自 SO 发布的问题的 QMgr!

PLM.SECURE.SVRCONN 频道定义如下所示:

AMQ8414: Display Channel details.
   CHANNEL(PLM.SECURE.SVRCONN)             CHLTYPE(SVRCONN)
   ALTDATE(2011-01-30)                     ALTTIME(15.02.56)
   COMPHDR(NONE)                           COMPMSG(NONE)
   DESCR( )                                HBINT(300)
   KAINT(AUTO)                             MAXINST(999999999)
   MAXINSTC(999999999)                     MAXMSGL(4194304)
   MCAUSER(nobody)                         MONCHL(QMGR)
   RCVDATA( )                              RCVEXIT( )
   SCYDATA( )
   SCYEXIT(/var/mqm/exits64/PLMESB_SBMD2/ESBSecurityExit(ChannelExit))
   SENDDATA( )                             SENDEXIT( )
   SHARECNV(10)                            SSLCAUTH(REQUIRED)
   SSLCIPH( )                              SSLPEER( )
   TRPTYPE(TCP)

鉴于该通道上有一个自定义安全出口,因此无法说明您收到 2009 年返回码的原因。最好的办法可能是查看安全退出日志。

通过 WMQ 资源管理器的连接可能使用了SYSTEM.ADMIN.SVRCONN,它没有出口。

我看到还为该通道定义了一个 CLNTCONN,它需要一个客户端出口。如果您的 Java 客户端使用客户端连接定义表 (CCDT),那么这会使事情变得更加复杂。 CLNTCONN 存在并列出了客户端出口这一事实表明,如果没有该客户端出口,PLM.SECURE.SVRCONN 将无法工作。

【讨论】:

  • @Rob:您能否提供 MQ 安全出口的代码,我可以使用它来运行当前程序并将其连接到队列管理器......
  • 非常感谢 Rob...终于明白了这个问题。如果我没记错的话,我想我需要编写 MQ 安全出口程序,它将向服务器验证我的用户 ID 和 MAC 地址。我需要在我的 java 程序中设置它..
  • 好吧,看起来有人已经写过了,因为它是在 CLNTCONN 频道中指定的。请咨询您的 WMQ 管理员,看看他们是否知道从哪里获取它。无论客户端模块是什么,都必须与通道的ESBSecurityExit 配对,后者已经存在。有人使用成功,我可以看到它正在运行。
  • 其实在浏览队列取消息的时候,一旦队列为空,就显示如下错误MQJE001: Completion Code '2', Reason '2033.....表示没有消息了可以在队列中使用,这是很自然的。有什么方法可以抑制此警告或解决此问题..目前我正在使用 MQException.logExclude(new Integer(MQException.MQRC_NO_MSG_AVAILABLE));禁止显示此警告...请帮助
  • 作为新问题发布。 SO 不能很好地用作对话论坛,因为二级和三级问答没有被编入索引。我这周在 IMPACT,明天有 18 小时的工作时间,所以为了让您开始,请查看添加 FAIL_IF_QUIESCING 并使用无限等待执行 GET。即使您基于此找到答案,也请发布一个新问题,以便我们记录答案以供其他人查找。谢谢!
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
相关资源
最近更新 更多