【问题标题】:MQ client application connect to a clientMQ 客户端应用程序连接到客户端
【发布时间】:2020-03-09 17:27:50
【问题描述】:

我编写了一个客户端应用程序来连接到 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'

【问题讨论】:

  • 您能否说明您还想连接哪些其他频道? MQ 客户端只能连接到 SVRCONN 通道。如果您尝试将 MQ 客户端连接到 RCVR 或其他通道类型,它将失败。如果这是你要问的,我会写一个包含更多细节的答案。
  • 您能澄清一下“处于客户端模式的 qmgr”是什么意思吗?您说您已成功将应用程序连接到 SVRCONN 通道。这意味着您成功地将应用程序连接到客户端模式下的队列管理器。需要明确的是,处于客户端模式的是“应用程序连接”,而不是队列管理器。
  • 是的,@JoshMc。这就是我的意思。为什么这段代码只能连接到 SVRCONN 通道,而不能连接到 RCVR 等其他通道...其次,如果我需要连接到 RCVR 或任何其他通道,我需要在代码中进行哪些更改?
  • 应用程序曾经连接到SVRCONN 频道。所有其他通道类型都用于将不同的队列管理器连接在一起,而不是用于连接应用程序。例如,无法更改您的代码以连接到RCVR 频道,这不是RCVR 频道的目的。为什么要这样做?

标签: java ibm-mq


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 2011-03-04
    • 2011-02-09
    相关资源
    最近更新 更多