You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pymqi连接IBM MQ遇MQRC_KEY_REPOSITORY_ERROR错误求助

解决pymqi连接IBM MQ时的MQRC_KEY_REPOSITORY_ERROR错误

错误信息

Traceback (most recent call last): File "c:\myDirectory\testMQ.py", line 92, in <module> connect_to_mq() File "c:\myDirectory\testMQ.py", line 68, in connect_to_mq qmgr.connect_with_options(queue_manager, cd, sco) File "C:\python\lib\site-packages\pymqi\__init__.py", line 1747, in connect_with_options raise MQMIError(rv[1], rv[2]) pymqi.MQMIError: MQI Error. Comp: 2, Reason 2381: FAILED: MQRC_KEY_REPOSITORY_ERROR

环境信息

OS : Windows 10
Python : 3.10.7
pip : 23.2.1
pymqi : 1.12.10
IBM MQ : 9.2.0.21

问题描述

使用pymqi库通过SSL连接IBM MQSeries时触发MQRC_KEY_REPOSITORY_ERROR(2381)错误,已拥有SSL所需的信任库、密钥库文件及对应密码,但不清楚如何正确配置信任库相关参数。

解决方案

该错误核心原因是密钥库路径格式错误,且缺少密钥库/信任库的密码配置。针对JKS格式的密钥库,按以下步骤调整:

  • 修正密钥库路径格式:IBM MQ客户端识别JKS文件时,需在路径前添加*JKS前缀,格式为*JKS <文件完整路径>,明确告知客户端使用JKS类型的密钥库。
  • 添加密码配置:通过pymqi.SCO对象的SSLKeyPassword(密钥库密码)和SSLTrustPassword(信任库密码)属性配置对应密码,若两者为同一文件,可设置相同密码。
  • 其他注意事项:确保JKS文件路径使用正斜杠/或转义反斜杠\\;确认SSLCipherSpec与MQ服务器端配置一致;检查JKS文件权限,保证Python进程可读取。

修改后的代码

import pymqi

queue_manager = "<QUEUE_NAME>"
channel = b"<CHANNEL_NAME>"
host = "<HOST>"
port = "<PORT>"
queue_name = "<FILE_QUEUE_NAME.QA>"
user = b"<user>"
password = b"<pwd>"

# 替换为实际的密钥库/信任库密码
key_store_pwd = b"<KEY_STORE_PASSWORD>"
trust_store_pwd = b"<TRUST_STORE_PASSWORD>"

conn_info = '%s(%s)' % (host, port)

ssl_cipher_spec = b"TLS_RSA_WITH_AES_256_CBC_SHA256"
# 修正JKS路径格式
key_repo_location = b'*JKS C:/myDirectory/keystore.jks'

message = '{"message":"Hello from Python !"}'

# ------- GET MESSAGE -------
md = pymqi.MD()
gmo = pymqi.GMO()
gmo.Options = pymqi.CMQC.MQGMO_WAIT | pymqi.CMQC.MQGMO_FAIL_IF_QUIESCING
gmo.WaitInterval = 5000 # 5秒
# ------- GET MESSAGE -------

# ------- SSL INFO -------
cd = pymqi.CD()
cd.ChannelName = channel
cd.ConnectionName = conn_info.encode('utf-8')
cd.ChannelType = pymqi.CMQC.MQCHT_CLNTCONN
cd.TransportType = pymqi.CMQC.MQXPT_TCP
cd.SSLCipherSpec = ssl_cipher_spec
cd.UserIdentifier = user
cd.Password = password

sco = pymqi.SCO()
sco.KeyRepository = key_repo_location
# 添加密钥库和信任库密码
sco.SSLKeyPassword = key_store_pwd
sco.SSLTrustPassword = trust_store_pwd
# ------- SSL INFO -------

qmgr = pymqi.QueueManager(None)
qmgr.connect_with_options(queue_manager, cd, sco)

queue = pymqi.Queue(qmgr, queue_name)

# 发送消息
print(f"发送消息")
queue.put(message)
print(f"消息发送完成")

queue.close()
print(f"关闭队列")
queue = pymqi.Queue(qmgr, queue_name)

# 读取消息
print(f"读取消息")
msg = queue.get(None, md, gmo)
print(msg)

queue.close()
print(f"关闭队列")
qmgr.disconnect()
print(f"断开连接")

内容的提问来源于stack exchange,提问作者Myke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:45:19