【问题标题】:How to connect to IBM MQ in Python with CCDT file, userid and password如何使用 CCDT 文件、用户 ID 和密码在 Python 中连接到 IBM MQ
【发布时间】:2019-03-23 19:10:48
【问题描述】:

我可以使用带有 Java 用户 ID 和密码的 CCDT 文件连接到 TDE MQ。我无法在 Python 中做到这一点。

在 Python 中,我为 MQCHLLIB 和 MQCHLTAB 设置了环境变量,但是当我尝试使用 pymqi.connect 进行连接时,我得到 MQRC 2538。我的代码如下

import pymqi
import os

os.environ['MQCHLLIB']='/root/pythonmq/'
os.environ['MQCHLTAB']='APPTDECH.TAB'

queue_manager = 'QM_APP'
user = "******" 
password = "*****"

qmgr = pymqi.connect(queue_manager, pymqi.CD(),None, user, password )

print('Connected')

qmgr.disconnect()

例外是:

pymqi.MQMIError: MQI Error. Comp: 2, Reason 2538: FAILED: MQRC_HOST_NOT_AVAILABLE.

如果有人知道我该怎么做,请告诉我。

【问题讨论】:

  • 让这个工作的唯一方法是使用mqccred exit。
  • 谢谢乔希!..你是对的。我做了改变,但得到了同样的错误。更新通道定义还有一个步骤。我正在努力。
  • 你用的是哪个版本的pymqi?除非您在 mqccred.ini 文件中指定 Force=TRUE 选项,否则即使最新版本 1.8.0 也无法使用 mqccred 退出。以下问题已修复,但尚未发布:The MQCSP structure is sent even if no user or password is passed to connectWithOptions #71
  • 我使用的是pymqi 1.8版。我有值“Force = True”,但我仍然遇到同样的错误。正如下面的博客文章链接中所述,我想我需要更新 CLNTCONN 通道定义以具有 SCYEXIT('mqccred(ChlExit)') 属性。
  • 这是正确的,如果没有在 CCDT 中或以编程方式指定它,您就不能使用客户端安全出口。您是否有理由要使用 CCDT 而不是直接通过 pymqi 连接调用指定连接详细信息?

标签: python ibm-mq tde pymqi


【解决方案1】:

要使用 CCDT,您必须使用不指定频道内容的 pymqi.connect 版本(例如 pymqi.CD()),例如

qmgr = pymqi.connect(queue_manager)

但是,您没有任何参数可将userpassword 放入。

简而言之,Python 界面并没有你需要的所有组合。

IBM MQ 提供了一个名为 mqccred 的出口,它可以为您替换凭证,用于无法更改或在您的情况下无法传递用户标识和密码的应用程序。

进一步阅读

【讨论】:

  • 嗨莫拉格!感谢您的回答。我正在处理第二部分“通过更新您的 CLNTCONN 通道定义以具有 SCYEXIT('mqccred(ChlExit)') 属性来调用通道出口。”。我假设这是在客户端完成的。
  • 无论您在哪里创建 CCDT,都可以这样做。 CLNTCONN 定义在 CCDT 中。您当然可以使用runmqsc -n 在客户端对其进行编辑。另外,在不明显的情况下,退出及其配置都是在客户端完成的。
  • 谢谢!!运行 runmqsc -n 后如何引用 CCDT?抱歉问了太多问题!
  • 我已经设置好环境变量了。 MQCHLLIB、MQCHLTAB 和 MQCCRED。
  • 我可以通过运行 runmqrc 进行编辑。命令执行成功。现在 MQRC 代码已更改为 2059。 pymqi.MQMIError: MQI 错误。比较:2,原因 2059:失败:MQRC_Q_MGR_NOT_AVAILABLE。
猜你喜欢
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多