MQ配置

本文介绍WMQ(WebSphere MQ)环境下两台计算机之间的队列和通道配置过程,并提供了一个具体的Java消息发送和接收示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mq配置归

网上收集的,自己整理了一下。

1.       基础环境

计算机A: computer1 ,IP地址为:10.1.1.1

计算机B: computer2 ,IP地址为:10.1.1.2

分别在两台计算机上安装MQ

2.       创建MQ对象

每一个WMS MQ 至少需要创建一个本地队列、一个远程队列、一个传输队列、一个发送通道、一个接收通道,并且所有WMS MQ上的队列管理器共享同一个服务器连接通道(并且A的接收通道名=B的发送通道名称、A的发送通道名称=B的接收通道名称)

l          计算机A:

打开“WebSphere MQ资源管理器,新建队列管理器,名称为A_QueueManager,其余采用默认设置;

Ø        创建队列

1.          创建本地队列:在A_QueueManager队列管理中创建本地队列,名称为A _LocalQueue;

2.          创建远程队列:名称为A _TransmissionQueue.新建时选择“本地队列”,并将“用法”设置为“传输”;

3.          创建远程队列:名称为A_RemoteQueue,设置远程队列名称为B_LocalQueue(计算机B的本地队列),传输队列名称为A_TransmissionQueue(即上一步创建的传输队列)

Ø       创建通道

1.          创建发送方通道:名称为A.B,传输协议为TCP/IP,连接名称为10.1.1.21414),传输队列为A_TransmissionQueue(即创建队列第2步创建的传输队列)

2.          创建接受方通道:名称为B.A,采用默认设置;

3.          创建服务器连接通道:名称为ServerConnChannel.采用默认设置。

l          计算机A:

打开“WebSphere MQ资源管理器,新建队列管理器,名称为B_QueueManager,其余采用默认设置;

Ø        创建队列

1.          创建本地队列:在B_QueueManager队列管理中创建本地队列,名称为B _LocalQueue;

2.          创建远程队列:名称为B _TransmissionQueue.新建时选择“本地队列”,并将“用法”设置为“传输”;

3.          创建远程队列:名称为B_RemoteQueue,设置远程队列名称为A_LocalQueue(计算机A的本地队列),传输队列名称为B_TransmissionQueue(即上一步创建的传输队列)

Ø       创建通道

1.          创建发送方通道:名称为B.A,传输协议为TCP/IP,连接名称为10.1.1.11414),传输队列为B_TransmissionQueue(即创建队列第2步创建的传输队列)

2.          创建接受方通道:名称为A.B,采用默认设置;

3.          创建服务器连接通道:名称为ServerConnChannel.采用默认设置。

3.       消息测试

AB上分别启动发送方通道,正常情况通道状态应该为“正在运行”。

import java.io.FileInputStream;

import java.io.IOException;

import java.io.StringWriter;

 

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

 

import com.ibm.mq.MQC;

import com.ibm.mq.MQEnvironment;

import com.ibm.mq.MQException;

import com.ibm.mq.MQGetMessageOptions;

import com.ibm.mq.MQMessage;

import com.ibm.mq.MQPutMessageOptions;

import com.ibm.mq.MQQueue;

import com.ibm.mq.MQQueueManager;

 

/**

 * A的发送程序和B的接收程序

* @author Administrator

 *

 */

public class AQueueManager {

void sender() {

           try {

                    String hostName = "10.1.1.1";

                    String channel = "ServerConnChannel

                    String qManager = "A_QueueManager";

                    String remoteQueue = "A_RemoteQueue";

                    int port = 1414;

                    //建立MQEnvironment属性以便客户机连接

                    MQEnvironment.hostname = hostName;

                    MQEnvironment.channel = channel;

                    MQEnvironment.port = port;

                    MQEnvironment.CCSID = 1381;

                    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

MQC.TRANSPORT_MQSERIES);

                    // 连接到队列管理器

                    MQQueueManager qMgr = new MQQueueManager(qManager);

                    /*

                     * 建立打开选项以便打开用于输出的队列,进一步而言,如果队列管理器是

                     * 停顿的话,我们也已设置了选项去应对不成功情况。

                     */

                    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

                    //打开队列

                    MQQueue queue = qMgr.accessQueue(remoteQueue, openOptions, null, null,null);

                    // 设置放置消息选项我们将使用默认设置。)

                    MQPutMessageOptions pmo = new MQPutMessageOptions();

                    /*

                     *下一步我们建立消息,MQMessage类压缩了包含实际消息数据的数据缓冲区,

*和描述消息的所有MQMD 参数.欲建立新消息,创建MQMessage 类新

                     * 实例以及使用writxxx方法 MQQueue put()方法也可作

* 为参数MQPutMessageOptions 类的实例。)

                    */

                    MQMessage outMsg = new MQMessage(); // Create The message

                    //创建消息缓冲区

                    outMsg.format = MQC.MQFMT_STRING; // Set the MQMD format

                    // 设置MQMD 格式字段

                    // 准备用户数据消息

                    String path = "d:/shd.xml";

                    SAXBuilder sax = new SAXBuilder();

                    Document document = sax.build(new FileInputStream(path));

                    StringWriter out = new StringWriter();

                    XMLOutputter XMLOut = new XMLOutputter(Format.getPrettyFormat()

                                       .setEncoding("GBK"));

                    XMLOut.output(document, out);

                    outMsg.writeUTF(out.toString());

                    // Now we put The message on the Queue(现在我们在队列上放置消息)

                    queue.put(outMsg, pmo);

                    // Commit the transaction.(提交事务处理)

                    qMgr.commit();

                    System.out.println(" The message has been Sussesfully put!");

                    // Close the the Queue and Queue manager objects.(关闭队列和队列管理器对象)

                    queue.close();

                    qMgr.disconnect();

           } catch (MQException ex) {

                    System.out.println("An MQ Error Occurred: Completion Code is :/t"

                                       + ex.completionCode + "/n/n The Reason Code is :/t"

                                       + ex.reasonCode);

                    ex.printStackTrace();

           } catch (Exception e) {

                    e.printStackTrace();

           }

}

public void receiver() {

           try {

                    String hostName = "10.1.1.2";

                    String channel = " ServerConnChannel ";

                    String qManager = " B_QueueManager";

                    String localQueue = "B _LocalQueue";

                    int port = 1415;

                    // 建立MQEnvironment 属性以便客户机连接

                    MQEnvironment.hostname = hostName;

                    MQEnvironment.channel = channel;

                    MQEnvironment.port = port;

                    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

MQC.TRANSPORT_MQSERIES);

                    //连接到队列管理器

                    MQQueueManager qMgr = new MQQueueManager(qManager);

                    /*

                     * 建立打开选项以便打开用于输出的队列,进一步而言,

*如果队列管理器是停顿的话,我们也已设置了选项去应对不成功情况。

                     */

                    int openOptions = MQC.MQOO_INPUT_SHARED|

MQC.MQOO_FAIL_IF_QUIESCING|MQC.MQOO_INQUIRE ;

                    // 打开队列

                    MQQueue queue = qMgr.accessQueue(localQueue, openOptions, null, null,null);

                    //设置放置消息选项

                    MQGetMessageOptions getMsgOpt = new MQGetMessageOptions();

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_SYNCPOINT; // Get messages

                    // 在同步点控制下获取消息)

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_WAIT; // Wait if no messages

                    //如果在队列上没有消息则等待

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_FAIL_IF_QUIESCING; // Fail

                    // 如果队列管理器停顿则失败

                    getMsgOpt.waitInterval = 3000;

                    // 设置等待的时间限制

                    /*

                     * 下一步我们建立消息,MQMessage类压缩了包含实际消息数据的数据缓冲区,

                     * 和描述消息的所有MQMD 参数)

                     */

                    MQMessage inMsg = new MQMessage(); // Create the message

                    // 创建消息缓冲区

                     int depth = queue.getCurrentDepth();

                     System.out.println("queue depth is:"+queue.getCurrentDepth());

            //将队列的里的消息读出来

            while(depth-->0) {     

                MQMessage msg = new MQMessage();// 要读的队列的消息     

                MQGetMessageOptions gmo = new MQGetMessageOptions();     

                queue.get(msg, gmo);     

                System.out.println("消息的大小为:"+msg.getDataLength());     

                System.out.println("消息的内容:/n"+msg.readUTF());     

                System.out.println("---------------------------");     

            }

                    // 提交事务处理

                    qMgr.commit();

                    // 关闭队列和队列管理器对象

                    queue.close();

                    qMgr.disconnect();

           }

           catch (MQException ex){

                    System.out.println("An MQ Error Occurred: Completion Code is :/t" +

                    ex.completionCode + "/n/n The Reason Code is :/t" + ex.reasonCode);

                    ex.printStackTrace();

           }catch (Exception e) {

                    e.printStackTrace();

           }

}s

public static void main(String args[]) {

           ZlglQueueManager queueManager = new ZlglQueueManager();

           queueManager.sender();

           //queueManager.receiver();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值