当前位置: 首页 > 知识库问答 >
问题:

IBM MQ JMSWMQ0018:无法连接到连接模式为“Client”、主机名为“My_Local_QM(1401)”的队列管理器“My_Local_QM”

漆雕亮
2023-03-14

我创建了一个队列管理器,队列,通道(服务器-连接)。当我尝试发送消息时,看到以下错误:com.ibm.msg.client.jms.DetailedIllegalStateException:JMSWMQ0018:无法连接到连接模式为“Client”、主机名为“epspa(1401)”的队列管理器“my_local_qm”。检查队列管理器是否已启动,如果在客户端模式下运行,则检查是否有侦听器正在运行。有关更多信息,请参阅链接的异常。

也许我需要将用户设置为队列管理器?因为我使用了相同的java代码,但尝试连接到另一个队列管理器,而且工作得很好。但它对我的队列管理器不起作用。在另一台PC上安装了IBM MQ。

 private static final String HOST = "epspa";
private static final int PORT = 1401;
private static final String CHANNEL = "API.SVRCONN_LOCAL";
private static final String QMN = "MY_LOCAL_QM";
private static final String QUEUE_NAME = "API.QUEUE_NAME";
private static final String message ="message";

public static String sendMessage(String message) {
    String result = "Error";
    try {
        MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
        cf.setHostName(HOST);
        cf.setChannel(CHANNEL);
        cf.setPort(PORT);
        cf.setQueueManager(QMN);
        cf.setTransportType(WMQConstants.WMQ_MESSAGE_BODY_MQ);

        Destination destination = null;
        MessageProducer producer = null;

        Connection c = cf.createConnection();
        Session s = c.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = s.createQueue(QUEUE_NAME);
        producer = s.createProducer(destination);
        TextMessage tmo = s.createTextMessage();


        ((MQDestination) destination).setMessageBodyStyle
                (WMQConstants.WMQ_MESSAGE_BODY_MQ);

        tmo.setIntProperty(WMQConstants.JMS_IBM_CHARACTER_SET, 1208);
        tmo.setIntProperty(WMQConstants.JMS_IBM_ENCODING,546);
        tmo.setText(message);
        producer.send(tmo);

        result = "Success!";
    } catch (JMSException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

共有1个答案

孙夕
2023-03-14

CF.SetTransportType(WMQConstants.WMQ_Message_Body_MQ);

嗯,那是不对的。应该是:

cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);

JMSWMQ0018:无法连接到队列管理器

catch (JMSException e)
{
   if (e != null)
   {
      System.err.println("getLinkedException()=" + e.getLinkedException());
      System.err.println(e.getLocalizedMessage());
      e.printStackTrace();
   }
}
runmqsc MY_LOCAL_QM
DIS LISTENER(LISTENER.TCP)

下面是一个完全运行的JMS程序,它将消息放入队列:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;
import javax.jms.*;

import com.ibm.mq.jms.*;
import com.ibm.msg.client.wmq.WMQConstants;

/**
 * Program Name
 *  MQTestJMS11
 *
 * Description
 *  This java JMS class will connect to a remote queue manager and put a message to a queue.
 *
 * Sample Command Line Parameters
 *  -m MQA1 -h 127.0.0.1 -p 1414 -c TEST.CHL -q TEST.Q1 -u UserID -x Password
 *
 * @author Roger Lacroix
 */
public class MQTestJMS11
{
   private static final SimpleDateFormat  LOGGER_TIMESTAMP = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");

   private Hashtable<String,String> params;
   private MQQueueConnectionFactory mqQCF = null;


   /**
    * The constructor
    */
   public MQTestJMS11()
   {
      super();
      params = new Hashtable<String,String>();
   }

   /**
    * Make sure the required parameters are present.
    * @return true/false
    */
   private boolean allParamsPresent()
   {
      boolean b = params.containsKey("-h") && params.containsKey("-p") &&
                  params.containsKey("-c") && params.containsKey("-m") &&
                  params.containsKey("-q") &&
                  params.containsKey("-u") && params.containsKey("-x");
      if (b)
      {
         try
         {
            Integer.parseInt((String) params.get("-p"));
         }
         catch (NumberFormatException e)
         {
            b = false;
         }
      }

      return b;
   }

   /**
    * Extract the command-line parameters and initialize the MQ variables.
    * @param args
    * @throws IllegalArgumentException
    */
   private void init(String[] args) throws IllegalArgumentException
   {
      if (args.length > 0 && (args.length % 2) == 0)
      {
         for (int i = 0; i < args.length; i += 2)
         {
            params.put(args[i], args[i + 1]);
         }
      }
      else
      {
         throw new IllegalArgumentException();
      }

      if (allParamsPresent())
      {
         try
         {
            mqQCF = new MQQueueConnectionFactory();
            mqQCF.setQueueManager((String) params.get("-m"));
            mqQCF.setHostName((String) params.get("-h"));
            mqQCF.setChannel((String) params.get("-c"));
            mqQCF.setTransportType(WMQConstants.WMQ_CM_CLIENT);
            try
            {
               mqQCF.setPort(Integer.parseInt((String) params.get("-p")));
            }
            catch (NumberFormatException e)
            {
               mqQCF.setPort(1414);
            }
         }
         catch (JMSException e)
         {
            if (e != null)
            {
               MQTestJMS11.logger("getLinkedException()=" + e.getLinkedException());
               MQTestJMS11.logger(e.getLocalizedMessage());
               e.printStackTrace();
            }
            throw new IllegalArgumentException();
         }
         catch (Exception e)
         {
            MQTestJMS11.logger(e.getLocalizedMessage());
            e.printStackTrace();
            throw new IllegalArgumentException();
         }
      }
      else
      {
         throw new IllegalArgumentException();
      }
   }

   /**
    * Test the connection to the queue manager.
    * @throws MQException
    */
   private void testConn()
   {
      QueueConnection conn = null;
      QueueSession session = null;
      Queue myQ = null;

      try
      {
         conn = mqQCF.createQueueConnection((String) params.get("-u"), (String) params.get("-x"));
         conn.start();

         session = conn.createQueueSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
         MQTestJMS11.logger("successfully connected.");

         myQ = session.createQueue((String) params.get("-q"));

         MQDestination mqd = (MQDestination) myQ;
         mqd.setTargetClient(WMQConstants.WMQ_CLIENT_JMS_COMPLIANT);
//         mqd.setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ);

         sendMsg( session, myQ);
      }
      catch (JMSException e)
      {
         if (e != null)
         {
            MQTestJMS11.logger("getLinkedException()=" + e.getLinkedException());
            MQTestJMS11.logger(e.getLocalizedMessage());
            e.printStackTrace();
         }
      }
      catch (Exception e)
      {
         MQTestJMS11.logger(e.getLocalizedMessage());
         e.printStackTrace();
      }
      finally
      {
         try
         {
            if (session != null)
               session.close();
         }
         catch (Exception ex)
         {
            MQTestJMS11.logger("session.close() : " + ex.getLocalizedMessage());
         }

         try
         {
            if (conn != null)
               conn.stop();
         }
         catch (Exception ex)
         {
            MQTestJMS11.logger("connection.stop() : " + ex.getLocalizedMessage());
         }

         try
         {
            if (conn != null)
               conn.close();
         }
         catch (Exception ex)
         {
            MQTestJMS11.logger("connection.close() : " + ex.getLocalizedMessage());
         }
      }
   }

   /**
    * Send a message to a queue.
    * @throws MQException
    */
   private void sendMsg(QueueSession session, Queue myQ) throws JMSException
   {
      QueueSender sender = null;

      try
      {
         TextMessage msg = session.createTextMessage();
         msg.setText("Nice simple test. Time in 'ms' is  -> " + System.currentTimeMillis());
         // msg.setJMSReplyTo(tq);
         // msg.setJMSDeliveryMode( DeliveryMode.NON_PERSISTENT);

         MQTestJMS11.logger("Sending request to " + myQ.getQueueName());
         MQTestJMS11.logger("");

         sender = session.createSender(myQ);
         sender.send(msg);
      }
      finally
      {
         try
         {
            if (sender != null)
               sender.close();
         }
         catch (Exception ex)
         {
            MQTestJMS11.logger("sender.close() : " + ex.getLocalizedMessage());
         }
      }
   }

   /**
    * A simple logger method
    * @param data
    */
   public static void logger(String data)
   {
      String className = Thread.currentThread().getStackTrace()[2].getClassName();

      // Remove the package info.
      if ( (className != null) && (className.lastIndexOf('.') != -1) )
         className = className.substring(className.lastIndexOf('.')+1);

      System.out.println(LOGGER_TIMESTAMP.format(new Date())+" "+className+": "+Thread.currentThread().getStackTrace()[2].getMethodName()+": "+data);
   }

   /**
    * mainline
    * @param args
    */
   public static void main(String[] args)
   {
      MQTestJMS11 write = new MQTestJMS11();

      try
      {
         write.init(args);
         write.testConn();
      }
      catch (IllegalArgumentException e)
      {
         MQTestJMS11.logger("Usage: java MQTestJMS11 -m QueueManagerName -h host -p port -c channel -q JMS_Queue_Name -u UserID -x Password");
         System.exit(1);
      }
      catch (Exception e)
      {
         MQTestJMS11.logger(e.getLocalizedMessage());
         System.exit(1);
      }

      System.exit(0);
   }
}
 类似资料:
  • JMS应用程序需要七个参数才能与这里给出的MQ系列进行成功的SSL连接,https://github.com/ibm-messaging/mq-tls-ssl-wizard/blob/master/com.ibm.MQ.ssl-wizard/sample/sslsamplejms.java 我试图解释这些参数, > conname-服务器队列管理器的连接名,格式与MQSC DEFINE CHANN

  • 我所做的更改是使用defaut队列管理器(wmqconstants.wmq_queue_manager为空字符串)、使用“绑定”连接模式(wmqconstants.wmq_cm_bindings)和删除主机(wmqconstants.wmq_host_name为空字符串)。我收到以下例外: 当我指定主机时,它可以使用“客户端”连接模式,但不能使用绑定。此外,当指定队列管理器时,“绑定”连接模式也可

  • 我是WebSphere MQ的初学者,我在MQ6上工作,它工作得很好,但现在我安装了MQ7.1,当我试图创建一个新的队列管理器时,我可以创建它,但它不能连接,这给我带来了以下错误: 你对此有什么想法吗?谢谢:)

  • 我在 Linux 平台上安装了 WebSphere MQ 7.1,之后我安装了 WebSphere 消息代理 8.0.0.1。现在,当我尝试创建执行组时,我得到一个异常:原因码 2035。此异常表示用户未经授权连接到队列管理器。我已将此用户添加到 组中。当我使用MQ 7.0.x时,我没有遇到任何这样的问题。我搜索了很多,知道 MQ 7.1 中存在用户 ID 阻塞。但是,我希望此用户能够创建执行组,

  • 我正在尝试使用ccdt.tab文件连接到队列管理器。以下是我所尝试的: 以下是ccdt.tab中的内容 有谁知道哪里出了问题,怎么修复? PS:我确实看到了那些帖子:在JMS中使用CCDT文件连接到IBM MQ 下面是链接的异常和异常在I时打印出来的: 以下是当我时链接的异常和异常打印: