首页 > 解决方案 > MQ 客户端应用程序连接到客户端

问题描述

我编写了一个客户端应用程序来连接到 MQ。它在 svrconn 频道上工作正常,但在其他频道上不工作。

我的代码:

try {
    // Create a connection factory
    JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
    JmsConnectionFactory cf = ff.createConnectionFactory();

    // Set the properties
    cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
    cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
    cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
    cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
    cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
    cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
    cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
    cf.setStringProperty(WMQConstants.USERID, APP_USER);
    cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);

    // Create JMS objects
    context = cf.createContext();
    destination = context.createQueue("queue:///" + QUEUE_NAME);

    long uniqueNumber = System.currentTimeMillis() % 1000;
    TextMessage message = context.createTextMessage("Your lucky number today is " + uniqueNumber);

    producer = context.createProducer();
    producer.send(destination, message);
    System.out.println("Sent message:\n" + message);

    consumer = context.createConsumer(destination); // autoclosable
    String receivedMessage = consumer.receiveBody(String.class, 15000); // in ms or 15 seconds

    System.out.println("\nReceived message:\n" + receivedMessage);

    recordSuccess();
}

请帮忙解决这两个问题:

  1. 如何连接到处于客户端模式的 qmgr?
  2. 如何使此代码也连接到其他频道?

现在,当我尝试使用其他频道时,它会出现以下错误:

JMSWMQ0018: Failed to connect to a queue manager 'qmgr name' with connection mode 'Client'

标签: javaibm-mq

解决方案


您已指定频道名称, cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);

如果您使用cf.setStringProperty(WMQConstants.WMQ_CHANNEL, "MYOTHERCHANNEL"); 它将尝试使用该频道名称而不是您指定的名称


推荐阅读