与连接到IBM的问题用java MQ 7.5(Issues with connecting to i

2019-06-27 08:34发布

我很新的IBM MQ,我发现的文件或相关MB的书有这么几个,我发现只有一个“的WebSphere MQ使用Java”写于2004年,但在现实世界已经改变了很多。 我安装在RedHat Linux 64位验证MQ服务器7.5成功地根据本

我还创建队列管理器myqm1 ,排队LQ.TEST ,通道JAVA.CHANNEL并没有通过服务器上的命令行一些测试,以确保它们正常工作。 然而,当我安装了Windows XP的一个MQ客户端及以下java代码写的,它总是抛出一个exception:com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'

我的代码:

进口com.ibm.mq. *; 进口com.ibm.mq.constants.MQConstants;

/ ** *简单的示例程序* / public类MQSample {

 // code identifier static final String sccsid = "@(#) MQMBID sn=p000-L120604 su=_H-IvIK4nEeGko6IWl3MDhA pn=MQJavaSamples/wmqjava/MQSample.java"; // define the name of the QueueManager private static final String qManager = "myqm1"; // and define the name of the Queue private static final String qName = "LQ.TEST"; /** * Main entry point * * @param args - command line arguments (ignored) */ public static void main(String args[]) { try { MQEnvironment.hostname = "58.2.221.196"; MQEnvironment.channel = "JAVA.CHANNEL"; MQEnvironment.port = 1414; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES); MQEnvironment.userID = "mqm"; MQEnvironment.password = "mqm"; MQEnvironment.CCSID = 1208; // Create a connection to the QueueManager System.out.println("Connecting to queue manager: " + qManager); MQQueueManager qMgr = new MQQueueManager(qManager); // Set up the options on the queue we wish to open int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT; // Now specify the queue that we wish to open and the open options System.out.println("Accessing queue: " + qName); MQQueue queue = qMgr.accessQueue(qName, openOptions); // Define a simple WebSphere MQ Message ... MQMessage msg = new MQMessage(); // ... and write some text in UTF8 format msg.writeUTF("Hello, World!"); // Specify the default put message options MQPutMessageOptions pmo = new MQPutMessageOptions(); // Put the message to the queue System.out.println("Sending a message..."); queue.put(msg, pmo); // Now get the message back again. First define a WebSphere MQ // message // to receive the data MQMessage rcvMessage = new MQMessage(); // Specify default get message options MQGetMessageOptions gmo = new MQGetMessageOptions(); // Get the message off the queue. System.out.println("...and getting the message back again"); queue.get(rcvMessage, gmo); // And display the message text... String msgText = rcvMessage.readUTF(); System.out.println("The message is: " + msgText); // Close the queue System.out.println("Closing the queue"); queue.close(); // Disconnect from the QueueManager System.out.println("Disconnecting from the Queue Manager"); qMgr.disconnect(); System.out.println("Done!"); } catch (MQException ex) { ex.printStackTrace(); System.out.println("A WebSphere MQ Error occured : Completion Code " + ex.completionCode + " Reason Code " + ex.reasonCode); } catch (java.io.IOException ex) { System.out.println("An IOException occured whilst writing to the message buffer: " + ex); } return; } } 

任何人都可以抛出一盏灯,我这句话? 我完全下来。

Answer 1:

为了扩大沙市的答案,因为WMQ V7.1默认CHLAUTH规则阻止所有SVRCONN通道的所有访问,并阻止他们在所有SVRCONN通道管理权限。 如果你真的想连接到JAVA.CHANNELmqm ,那么你将需要重写这两种行为。

如果你是真正愿意让具有管理用户ID到QMGR远程,未经验证的连接,那么你必须完全禁用CHLAUTH规则的选项。 您可以通过发出这样做ALTER QMGR CHLAUTH(DISABLED)命令runmqsc但是这是非常沮丧,因为它留下了QMGR开放使用WMQ管理用户ID匿名远程执行代码。 这一点,但是,你看起来是试图做。

建议的方法是使用一个ID,是不是行政。 例如,如果你做称为ID mquser有私人组也被称为mquser那么你可以授予其权利来连接和查询的QMGR并打开指定队列放,获取,浏览和查询。 由于该ID是不是行政,这将是相对安全的,未经验证的信道使用。 你可以改变你的代码到指定ID作为mquser而不是mqm然后用CHLAUTH规则允许的连接。 例如:

SET CHLAUTH('JAVA.CHANNEL') TYPE(USERMAP) +
    CLNTUSER('mquser') USERSRC(MAP) +
    MCAUSER('mquser') ACTION(ADD) 

上面的规则告诉QMGR“当你看到从一个连接mquser上ID JAVA.CHANNEL ,然后设置MCAUSER到mquser和允许的连接。”

当您授予的权限,记得要授予他们对组而不是用户。 例如,如果使用setmqaut使用-g选项而不是-p选项。 如果有与授权错误的任何问题,你可以很容易地使用事件消息进行排序这些了。 首先,能够使用事件ALTER QMGR AUTHOREV(ENABLED) 。 这将导致QMGR发射的事件消息到SYSTEM.ADMIN.QMGR.EVENT队列。 您可以使用SupportPac中MH05或SupportPac中MS0P解析事件消息。 对于消息告诉你,请访问ID任何授权情况下,API调用(连接,打开,关闭等),呼叫是针对制造的物体并使用的确切选项。

此前WMQ V7.1,WebSphere MQ的允许所有远程连接,即使是匿名的,行政的。 虽然这让你方便地连接,在今天的较恶劣的网络环境到QMGR的主机服务器上远程匿名执行代码的能力,被视为不可接受的安全风险。 所以,现在新QMGR被设定为不默认允许任何远程管理访问。 作为管理员,这需要你明确禁用安全性得到旧的行为或明确规定的安全访问。



Answer 2:

在MQ V7.5,通过向队列管理器默认的访问被阻止。 您需要为您创建的通道,创建通道认证记录JAVA.CHANNEL允许用户访问队列管理器。 请点击此链接对信道认证记录的详细信息



文章来源: Issues with connecting to ibm mq 7.5 using java
标签: java ibm-mq