- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用这个官方 IBM 教程: MQ JMS application development with Spring Boot
并在 docker 中使用 IBM® MQ Advanced for Developers 从这个 docker hub 页面获得:ibmcom/mq
MQ 使用此命令启动:
docker run --name mq --env LICENSE=accept --env MQ_QMGR_NAME=QM1 --publish 1414:1414 --publish 9443:9443 --detach ibmcom/mq
它已启动并正在运行,我可以使用连接名称和 channel 信息连接到它:
ibm.mq.channel: DEV.ADMIN.SVRCONN
ibm.mq.connectionName: localhost(1414)
但是,当我尝试使用 CCDT 文件连接到它时出现错误。我用这个命令得到了这个 CCDT 文件:
docker cp <container_id>:/mnt/mqm/data/qmgrs/QM1/@ipcc/AMQCLCHL.TAB <path_to_ccdt_path_on_my_computer>
我已经设置了正确的 application.yml 属性:
ibm:
mq:
ccdtUrl: file://<path_to_ccdt_path_on_my_computer>
但是我得到这个错误:
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2020: Failed to connect to queue manager 'QM1' with connection mode 'Client' and supplied CCDT URL 'AMQCLCHL.TAB', see linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:595)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:424)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7815)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:303)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6016)
at com.ibm.mq.jms.MQConnectionFactory.createConnection(MQConnectionFactory.java:6041)
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:196)
at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:411)
at org.springframework.jms.listener.AbstractJmsListeningContainer.establishSharedConnection(AbstractJmsListeningContainer.java:379)
at org.springframework.jms.listener.DefaultMessageListenerContainer.establishSharedConnection(DefaultMessageListenerContainer.java:818)
at org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:291)
at org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:276)
at org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.java:612)
at org.springframework.jms.config.JmsListenerEndpointRegistry.startIfNecessary(JmsListenerEndpointRegistry.java:242)
at org.springframework.jms.config.JmsListenerEndpointRegistry.start(JmsListenerEndpointRegistry.java:205)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53)
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360)
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158)
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:879)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
at Application.main(Application.java:11)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2278' ('MQRC_CLIENT_CONN_ERROR').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
... 31 common frames omitted
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2278
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1688)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1273)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:377)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:562)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:357)
... 30 common frames omitted
官方故障排除在这里:2278 (08E6) (RC2278): MQRC_CLIENT_CONN_ERROR ,但是说:
“当指定客户端 channel 定义表 (CCDT) 以确定 channel 名称时,它也会发生在 Java™ 应用程序中,但找不到该表本身。”
无论找到表文件,如果我故意拼错文件名,我都会得到一个 FileNotFoundException。
那么,我错过了什么?
最佳答案
2278 MQRC_CLIENT_CONN_ERROR
如您所见,是因为应用程序找不到与指定的队列管理器名称匹配的 channel 。
2540 MQRC_UNKNOWN_CHANNEL_NAME
错误是因为通过设置 QMNAME
channel 领域SYSTEM.DEF.CLNTCONN
您现在正在尝试连接到 SVRCONN
channel 名为 SYSTEM.DEF.CLNTCONN
这是不存在的。
默认情况下,新队列管理器附带一个默认 channel 表,该表位于 MQDATA 路径下的以下位置:qmgrs/<QMGR_NAME>/@ipcc/AMQCLCHL.TAB
默认 channel 表只包含一个CLNTCONN
channel 名为 SYSTEM.DEF.CLNTCONN
.这只是为了显示新定义的默认值 CLNTCONN
channel 。
在队列管理器上,您的客户端应用程序连接到 SVRCONN
channel 。在连接的客户端,如果您使用与队列管理器配对的 CCDT channel 类型 SVRCONN
是 CLNTCONN
.
由于您正在连接到 SVRCONN
channel 名为 DEV.ADMIN.SVRCONN
你需要用 CLNTCONN
定义一个 CCDT channel 名为 DEV.ADMIN.SVRCONN
.
我建议不要修改默认的 CCDT,而是创建一个新的。
您可以使用以下步骤创建 CCDT:
echo "DEFINE CHL(DEV.ADMIN.SVRCONN) CHLTYPE(CLNTCONN) QMNAME(QM1) CONNAME(`localhost(1414)`)" | MQCHLLIB=/PATH/TO/CCDT MQCHLTAB=NAME_OF_CCDT runmqsc -n
只需替换 MQCHLLIB
的值和 MQCHLTAB
使用您要调用 CCDT 的实际路径和名称,例如,创建一个名为 AMQCLCHL.TAB
的 CCDT在/tmp
使用以下命令:
echo "DEFINE CHL(DEV.ADMIN.SVRCONN) CHLTYPE(CLNTCONN) QMNAME(QM1) CONNAME(`localhost(1414)`)" | MQCHLLIB=/tmp MQCHLTAB=AMQCLCHL.TAB runmqsc -n
有关显示如何创建 CCDT 以及 MQ 如何在 CCDT 中选择特定 channel 的更多示例,您可以查看我对 Connecting to IBM MQ using CCDT file in JMS 的回答.
关于spring-boot - 使用 CCDT + Spring Boot 在 docker 中使用 IBM MQ 的 MQRC_CLIENT_CONN_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308652/
我正在配置一个 Web 应用程序以通过 WMQ 连接到另一个 Web 应用程序。 当两个应用程序连接到同一本地服务器时,MQ 配置在本地工作正常。 但是,当我在各自的服务器上部署每个应用程序时,我收到
我正在尝试使用 JMS 和客户端 channel 定义表 (CCDT) 连接到 IBM MQ。当我单独指定 MQ 属性时,我能够成功连接到 QueueManager。但是当我尝试使用 CCDT 文件时
我们正在尝试使用 CCDT 文件和 JMS 配置连接到 IBMMQ。我们能够连接到它,但这里有一个问题: 因为我们使用 spring 通过 CCDT 文件设置连接工厂,它在应用程序启动时初始化一次,但
我需要一些帮助,让我的 Tomcat 安装(基于 64 位 Java)连接到使用 CCDT 文件的 MQ 服务器。 MQ Server 是 64 位安装,版本为 7.0.0.9。截至目前,我在应用程序
我能够使用 CCDT 文件以及 Java 中的用户 ID 和密码连接到 TDE MQ。我无法在 Python 中做到这一点。 在Python中,我已经为MQCHLLIB和MQCHLTAB设置了环境变量
我正在使用这个官方 IBM 教程: MQ JMS application development with Spring Boot 并在 docker 中使用 IBM® MQ Advanced for
我是一名优秀的程序员,十分优秀!