Ibm mq 如何编写脚本来复制IBM MQ MQExplorer对象创建行为?

Ibm mq 如何编写脚本来复制IBM MQ MQExplorer对象创建行为?,ibm-mq,Ibm Mq,使用IBM MQ8.0.0.9我无法从命令行复制MQExplorerGUI操作的行为 使用MQExplorerI创建: 使用默认值名为testQueueManager的队列管理器 使用默认值标题为testQueue的队列 使用默认设置的名为testChannel的服务器连接通道 使用*->User idclient Java客户端连接到该实例时没有问题 下面的shell脚本应该与上面的脚本完全相同。我知道我授予的权限超出了需要,这纯粹是为了连接测试 #!/bin/sh set -eu user=

使用IBM MQ
8.0.0.9
我无法从命令行复制
MQExplorer
GUI操作的行为

使用
MQExplorer
I创建:

  • 使用默认值名为
    testQueueManager
    的队列管理器
  • 使用默认值标题为
    testQueue
    的队列
  • 使用默认设置的名为
    testChannel
    的服务器连接通道
  • 使用
    *
    ->User id
    client
  • Java客户端连接到该实例时没有问题

    下面的shell脚本应该与上面的脚本完全相同。我知道我授予的权限超出了需要,这纯粹是为了连接测试

    #!/bin/sh
    set -eu
    user=client
    pass=password
    qmgr="testQueueManager"
    channel="testChannel"
    queue="testQueue"
    
    useradd "$user" && echo "$user":password | chpasswd
    /opt/mqm/bin/crtmqm "$qmgr"
    /opt/mqm/bin/strmqm "$qmgr"
    /opt/mqm/bin/runmqsc "$qmgr" << EOF
    DEFINE QLOCAL('$queue')
    DEFINE CHANNEL('$channel') CHLTYPE(SVRCONN) TRPTYPE(TCP)
    SET CHLAUTH('$channel') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(MAP) MCAUSER('$user') ACTION(ADD)
    EOF
    
    /opt/mqm/bin/setmqaut -m "$qmgr" -t qmgr -p client +all
    /opt/mqm/bin/setmqaut -m "$qmgr" -n "$channel" -t channel -p client +all
    /opt/mqm/bin/setmqaut -m "$qmgr" -n "$queue"  -t queue -p client +all
    
    我希望Java客户机连接到相同的项目时会出现相同的行为。我得到的是一个令人讨厌的堆栈跟踪,如下所示:

    org.apache.felix.log.LogException: com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'testQueueManager' with connection mode 'Client' and host name '127.0.0.1(1414)'.
            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:423)
            at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
            at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7814)
            at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:299)
            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)
            ... 7 more
    Caused by: org.apache.felix.log.LogException: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2009' ('MQRC_CONNECTION_BROKEN').
            at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
            ... 15 more
    Caused by: org.apache.felix.log.LogException: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2009;AMQ9204: Connection to host '127.0.0.1(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2009;AMQ9208: Error on receive from host '/127.0.0.1:1414 (localhost)'. [1=-1,2=ffffffff,3=/127.0.0.1:1414 (localhost),4=TCP]],3=127.0.0.1(1414),5=RemoteConnection.receiveTSH]
            at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2276)
            at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1288)
            at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
            at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:560)
            at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:356)
            ... 14 more
    Caused by: org.apache.felix.log.LogException: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2009;AMQ9208: Error on receive from host '/127.0.0.1:1414 (localhost)'. [1=-1,2=ffffffff,3=/127.0.0.1:1414 (localhost),4=TCP]
            at com.ibm.mq.jmqi.remote.impl.RemoteConnection.receiveTSH(RemoteConnection.java:3291)
            at com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1411)
            at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:1007)
            at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
            at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
            at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:155)
            at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1724)
            ... 18 more
    
    org.apache.felix.log.LogException:com.ibm.msg.client.jms.DetailedJMSException:JMSWMQ0018:无法连接到连接模式为“client”且主机名为“127.0.0.1(1414)”的队列管理器“testQueueManager”。
    位于com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:595)
    位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
    位于com.ibm.msg.client.wmq.internal.WMQConnection.(WMQConnection.java:423)
    位于com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
    位于com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7814)
    位于com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.\u createConnection(jmsconnectionfactorympl.java:299)
    位于com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.createConnection(jmsconnectionfactorympl.java:236)
    位于com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6016)
    位于com.ibm.mq.jms.MQConnectionFactory.createConnection(MQConnectionFactory.java:6041)
    ... 还有7个
    原因:org.apache.felix.log.LogException:com.ibm.mq.MQException:JMSCMQ0001:WebSphere mq调用失败,代码为“2”(“MQCC_失败”)原因为“2009”(“MQRC_连接断开”)。
    位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
    ... 还有15个
    原因:org.apache.felix.log.LogException:com.ibm.mq.jmqi.JmqiException:CC=2;RC=2009;AMQ9204:与主机“127.0.0.1(1414)”的连接被拒绝。[1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2009;AMQ9208:从主机'/127.0.0.1:1414(localhost)'接收时出错。[1=-1,2=ffffffff,3=/127.0.0.1:1414(localhost),4=TCP]],3=127.0.0.1(1414),5=RemoteConnection.receiveTSH]
    位于com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2276)
    位于com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1288)
    在com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
    位于com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:560)
    位于com.ibm.msg.client.wmq.internal.WMQConnection.(WMQConnection.java:356)
    ... 14多
    原因:org.apache.felix.log.LogException:com.ibm.mq.jmqi.JmqiException:CC=2;RC=2009;AMQ9208:从主机“/127.0.0.1:1414(本地主机)”接收时出错。[1=-1,2=FFFFFF,3=/127.0.0.1:1414(本地主机),4=TCP]
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnection.receiveTSH(RemoteConnection.java:3291)
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1411)
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:1007)
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
    位于com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:155)
    位于com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1724)
    ... 还有18个
    

    似乎指出了jar文件的差异,但我在这两种情况下使用的是相同的客户机。似乎命令行的默认值与MQExplorer的默认值有所不同,我看不到您在脚本中为队列管理器创建侦听器或在crtmqm命令上设置默认侦听器(
    -p 1414
    )。在MQ资源管理器中,创建队列管理器的其中一个步骤具有在端口1414上创建侦听器的默认设置

    要解决此问题,请执行以下操作之一:

    将crtmqm命令更改为:
    crtmqm-p 1414$qmgr

    将以下MQSC命令添加到runmqsc命令:

    DEFINE LISTENER(LISTENER) TRPTYPE(TCP) PORT(1414)
    START LISTENER(LISTENER)
    

    我看不到您在脚本中为队列管理器创建侦听器或在crtmqm命令上设置默认侦听器(
    -p 1414
    )。在MQ资源管理器中,创建队列管理器的其中一个步骤具有在端口1414上创建侦听器的默认设置

    要解决此问题,请执行以下操作之一:

    将crtmqm命令更改为:
    crtmqm-p 1414$qmgr

    将以下MQSC命令添加到runmqsc命令:

    DEFINE LISTENER(LISTENER) TRPTYPE(TCP) PORT(1414)
    START LISTENER(LISTENER)
    

    非常好,谢谢!我以为港口开放后它就在那里,但显然不是!非常好,谢谢!我以为港口开放后它就在那里,但显然不是!我会避免在MQ对象名称中使用小写字母。MQ标准使用大写字母。注意:当通过runmqsc创建MQ对象时,如果您不将对象名称加引号,MQ将自动以大写形式创建对象。我将避免在MQ对象名称中使用小写。MQ标准使用大写字母。注意:当通过runmqsc创建MQ对象时,如果您没有将对象名称置于引号中,MQ将自动以大写形式创建对象。