IBM WebSphere MQ介绍安装以及配置服务详解

首先介绍一下MQ

MQ消息队列的简称是一种应用程序对应用程序的通信方法。说白了也就是通过队列的方式来对应用程序进行数据通信。而无需专用链接来链接它们。

MQ的通讯方式

1.数据报的方式 Datagram (Send and forget)

应用程序在创建完消息后。利用MQ的API将消息发送到队列中。它充分利用了MQ(once and once only )

2.请求和应答方式 Request/Reply

发送消息之后需等待对方处理结果。  需考虑如下问题:

a.等待应答的时间是多少?

b.如果没有应答怎么办。

c.本次session是否需要保留?

MQ的开发流程

1.让应用程序与队列管理器链接,通过MQconnect调用来进行此链接。

2.使用MQOpen调用为输出打开一个队列

3.应用程序使用MQPut调用将其数据放到队列上。

4.调用MQOpen调用打开输入队列

5.使用MQGet从队列上接收数据

安装步骤。(此处为转载文章,作者已经证实所有步骤。)

Windows下 WebSphere MQ
服务端的安装:


1)把WebSphere MQ
Windows版服务器CD-ROM插入CD-ROM驱动器。


2)如果安装了自动运行,那么会启动安装进程。如果不启动,则双击CD-ROM上的根目录中的Setup图标以启动安装程序。

(3)请等待,直到出现"WebSphere MQ

安装启动板"窗口为止。

(4)如果需要更改安装的本地语言,单击"选择语言"图标,然后从列表中选择所需的语言。

(5)选择必备软件选项。

选择典型安装后,安装界面上的每个安装项右边有一个对钩号(表示已安装),反之则为一个叉号(表示还没有安装,如果要装
MQ,则必须先把这些软件装好)。

如果出现了叉号:

1)单击项目左边的
"+"号以显示安装连接;

2)选择要使用的安装源的选项,从以下各项选择:

  • WebSphere MQ CD
  • 因特网
  • 网络


6)安装完成时,单击项目左边的"-"符号。
注意:对于定制安装,可能不需要所有的必备软件。


7)安装完所有的必备软件,然后选择"网络先决条件"选项。


8)选择"WebSphere
MQ"安装选项

(9)选择启动WebSphere
MQ安装程序,然后等待,直到显示了带有欢迎信息的"WebSphere MQ安装"窗口为止。

(10)单击"下一步"按钮继续。

(11)阅读面板上的信息和许可证条款,选择接受,然后单击"下一步"。

(12)如果机器上未安装过此产品的前一个版本,则显示"安装类型"面板。选择希望的安装类型(一般选择"典型"安装即可),然后单击"下一步"按钮。

(13)"WebSphere
MQ安装"窗口显示"安装WebSphere MQ就绪"信息。该窗口还显示用户选中的安装摘要,单击"安装"开始正式安装。


14)成功安装WebSphere
MQ后,"WebSphere MQ安装"窗口显示以下信息:安装向导成功完成。


15)单击"完成"按钮启动"准备WebSphere
MQ"向导。

安装图示

应用分析

该章节主要内容包括MQ服务端的基本配置,如队列管理器,队列以及通道的建立,

且包含JAVA实现的客户端程序。由此构成一个完整的客户端-服务器的流程。

 
服务端配置

1)点
"开始"->"所有程序"->"IBM
WebSphere MQ"->"WebSphere MQ 资源管理器",进入WebSphere MQ
资源管理器界面。如下图所示:


图9
服务端配置

2)创建名为
"QM_JACK"的队列管理器

<1>选中
"队列管理器"->"新建"->"队列管理器",如下图所示:


图10 创建名为"QM_JACK"的队列管理器

<2>在队列管理中输入
"QM_JACK",其他选项默认不变,点"下一步":


图11 在队列管理中输入"QM_JACK"

<3>设置队列日志(本步骤采用系统默认设置),点
"下一步":


图12
设置队列日志

<4>启动队列管理器,创建服务器连接通道,允许在
TCP/IP上进行队列管理器的远程管理,点击"下一步":


图13 创建服务器连接通道

<5>设置队列管理器
QM_JACK的侦听端口:8927(用户可以根据需要自行更改端口号),点击"完成"。


14
设置队列管理器QM_JACK的侦听端口

<6>系统进入等待界面:


15
系统等待界面

<7>队列管理器
QM_JACK创建成功


16
系统队列管理器QM_JACK创建成功

3)在
QM_JACK下创建名为"QUEUE_RECV"和"QUEUE_REPLY"的本地队列(客户可以根据自己的需求随意更改本地队列的名字和数量,这里创建这两个本地队列只是为之后的MQ_Tuxedo项目作准备):


图17 定义本地队列


图18 定义本地队列

设置队列名后其他属性全为系统默认值,点击
"确定"。

4)在
QM_JACK下创建名为"CNN_JACK"的服务器通道。


19
创建服务器连接通道


图20 创建服务器连接通道

通道名称设为
CNN_JACK,其他选项保留为系统默认设置,点击"确定"。

5)在
MQ服务器端的计算机用户中添加MQ客户端所在计算机的系统用户。比如我的MQ客户端被Suse
Linux下的root用户使用,那么,我们就需要在MQ的服务端(也就是Windows
xp系统中添加名为"root"的用户)所在的计算机系统中添加名为"root"的用户。具体步骤如下:

<1>点击
"开始"->"控制面板"->"计算机管理"->"系统工具"->"本地用户和组"->"用户",点右键,选"新用户",如下图所示:


图21
创建系统用户

<2>创建新用户:
root(注意:这里的用户名"root"是MQ客户端所在系统的用户名,用户要根据具体情况进行修改)

图22 创建系统用户

随意设置一个有效密码,选中密码永不过期,点击
"创建"。

<3>将新用户加入
mqm组(注意:这里的mqm组是我们安装完MQ
Server后系统自动创建的)。具体操作如下:


图23
设置系统用户所在组

点击
"属性":


图24 设置系统用户所在组

点击
"添加":

图25
设置系统用户所在组

输入对象名称:
mqm,点击"确定":


图26 设置系统用户所在组

root用户被添入
mqm组中:

图27 设置系统用户所在组

点击
"应用",点击"确定"。

重启机器。至此,
MQ服务端的配置完成。

客户端实现   JAVA客户端源码

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.MQQueue;
import com.ibm.mq.MQQueueManager;

/**
 * 函数功能: MQjava客户端实现
 */

public class MQClient {

    /**
     * Logger for this class
     */
    private static final Log logger = LogFactory.getLog(MQClient.class);
    private String strExtraSendXmlFileName = "D:\\jndi.properties";
    private static Properties props;

    static {
    props = new Properties();
    props.put("mqHostName", "139.31.89.67");
    props.put("mqPort", "4032");
    props.put("mqCCSID", "1381");
    props.put("mqUserName", "liujx");
    props.put("mqPassword", "linux");
    props.put("mqQManager", "Monitor_Queue_Manager");
    props.put("mqChannel", "Monitor_Conn_Chanel");
    props.put("mqLocalOutQueue", "Q_RECEIVE");
    props.put("mqLocalInQueue", "Q_RECEIVE");

    }

    /**
     *
     * 函数功能:TODO 主测试方法 <br>
     * 相关参数: <br>
     *
     * @param args
     *            修改记录: <br>
     */

    public static void main(String[] args) {

    MQClient test = new MQClient();
    // 发送消息
    test.putMsg();
    // 接收消息
    test.getMsg();
    }

    public void putMsg() {
    // MQ发送数据
    try {
        // 建立MQ客户端应用上下文环境
        MQEnvironment.hostname = props.getProperty("mqHostName");
        MQEnvironment.port = Integer.parseInt(props.getProperty("mqPort"));
        MQEnvironment.CCSID = Integer
            .parseInt(props.getProperty("mqCCSID"));
        MQEnvironment.channel = props.getProperty("mqChannel");
        MQEnvironment.userID = props.getProperty("mqUserName");
        MQEnvironment.password = props.getProperty("mqPassword");
        // 连接队列管理器
        MQQueueManager qMgr = new MQQueueManager(
            props.getProperty("mqQManager"));
        int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;
        // 打开队列
        MQQueue q = null;
        try {
        q = qMgr.accessQueue(props.getProperty("mqLocalOutQueue"),
            openOptions);
        } catch (MQException me) {
        System.out.println("打开队列出现通讯异常" + me.getMessage() + "\n");
        return;
        }
        InputStream fins = new FileInputStream(new File(
            strExtraSendXmlFileName));
        byte[] data = new byte[fins.available()];
        fins.read(data);
        fins.close();
        MQMessage msg = new MQMessage();
        msg.write(data);
        // 放入消息
        q.put(msg);
        System.out.println("客户端发送数据包成功..");
        // 关闭队列
        q.close();
        // 断开队列管理器连接
        qMgr.disconnect();
    } catch (MQException e) {
        if (logger.isDebugEnabled())
        logger.debug(e.getMessage());
        e.printStackTrace();
    } catch (Exception e) {
        if (logger.isDebugEnabled())
        logger.debug(e.getMessage());
        e.printStackTrace();
    }
    }

    /**
     *
     * 函数功能:TODO 获取数据 <br>
     * 修改记录: <br>
     */
    public void getMsg() {
    // MQ接收数据
    try {
        // 建立用上下文环境
        MQEnvironment.hostname = props.getProperty("mqHostName");
        MQEnvironment.port = Integer.parseInt(props.getProperty("mqPort"));
        MQEnvironment.CCSID = Integer
            .parseInt(props.getProperty("mqCCSID"));
        MQEnvironment.channel = props.getProperty("mqChannel");
        MQEnvironment.userID = props.getProperty("mqUserName");
        MQEnvironment.password = props.getProperty("mqPassword");
        // 建立队列管理器
        MQQueueManager qMgr = new MQQueueManager(
            props.getProperty("mqQManager"));
        int openOptions = MQC.MQOO_INPUT_AS_Q_DEF
            | MQC.MQOO_FAIL_IF_QUIESCING;
        // 打开队列
        MQQueue q = qMgr.accessQueue(props.getProperty("mqLocalInQueue"),
            openOptions);
        MQGetMessageOptions mgo = new MQGetMessageOptions();
        mgo.options |= MQC.MQGMO_NO_WAIT;
        // 构造返回消息
        MQMessage msg = new MQMessage();
        if ((msg = fetchOneMsg(q)) != null) {
        byte[] xmlData = new byte[msg.getDataLength()];
        msg.readFully(xmlData);
        logger.info(new String(xmlData));
        System.out.println("接收服务器端返回数据包成功..\n接收数据为:\n"
            + new String(xmlData));
        }
        // 关闭队列
        q.close();
        // 断开队列管理器
        qMgr.disconnect();
    } catch (MQException e) {
        logger.error(e);
        e.printStackTrace();
    } catch (Exception e) {
        logger.error(e);
        e.printStackTrace();
    }
    }

    /**
     *
     * 函数功能:TODO 从队列中取出消息 <br>
     * 相关参数: <br>
     *
     * @param q
     * @return
     * @throws Exception
     *             修改记录: <br>
     */
    private static MQMessage fetchOneMsg(MQQueue q) throws Exception {
    MQGetMessageOptions mgo = new MQGetMessageOptions();
    mgo.options |= MQC.MQGMO_NO_WAIT;
    MQMessage msg = new MQMessage();
    try {
        // 获取消息
        q.get(msg, mgo);
    } catch (MQException e) {
        return null;
    }
    return msg;
    }
}

出处:https://www.cnblogs.com/swugogo/p/5917677.html

原文地址:https://www.cnblogs.com/mq0036/p/9473848.html

时间: 2024-10-23 14:40:53

IBM WebSphere MQ介绍安装以及配置服务详解的相关文章

MQ原理、使用场景、IBM WebSphere MQ介绍及spring集成配置

一.MQ简介及特点 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WebSphere MQ.RabbitMQ .ZeroMQ

Python安装、配置图文详解

原文地址:http://weixiaolu.iteye.com/blog/1617440 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(IDE) 1. 在Eclipse中安装PyDev插件 2. 配置Python Interpreters 四. 创建Python Project 五. 编写HelloWorld 六. 小结 一. Python简介: Python在Linux.wi

Python安装、配置图文详解(转载)

Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(IDE) 1. 在Eclipse中安装PyDev插件 2. 配置Python Interpreters 四. 创建Python Project 五. 编写HelloWorld 六. 小结 一. Python简介: Python在Linux.windows.Mac os等操作系统下都有相应的版本,不管在

win10下MYSQL的下载、安装以及配置超详解教程(转)

下载MYSQL 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 进入官网点击Community,下载社区版. 找到MYSQL Community Server,点击下方DOWNLOAD,进入下载页面. 滑动到页面底部,官网提供了不同电脑位数(32/64位)的下载版本,我的电脑是win10-64位的,选择对应版本下载解压包. 如果你没有注册登录下载页面时,官网会提示你注册一个账号进行下载,当然你也可以选择图中红线标注部

mysql在win系统dos 安装版配置步骤详解

1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32.这个就是mysql的根目录了. --------------------------------------------------------------------------------------------- 2.配置 在根目录下有几个文件如下: my-small.ini (这是针对一个小内

Weblogic安装与配置图文详解

Weblogic是什么Weblogic的安装Weblogic创建域Weblogic管理域Weblogic的应用Weblogic是什么 Weblogic这是我入职以后第一次接触到的词汇,我很陌生,就从我的角度来讲,我需要知道Weblogic是什么.干吗用的,然后才继续深入的学习怎么使用它.WebLogic是美商Oracle的主要产品之一,系购并得来.是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器, 目前

phpStudy2018安装与配置步骤详解

phpStudy 2018是一款非常强大的php环境调试工具,一次性安装,无须配置即可使用,是非常方便.好用的PHP调试环境.对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事:对老手来说也是一件烦琐的事.因此无论你是新手还是老手,该程序包都是一个不错的选择. 一,下载地址:http://www.phpstudy.net/download.html phpStudy 2018( PHP运行环境一键安装包) v1.17 官方最新版 支持win10 二,安装phpStudy (1),解

IBM WebSphere MQ 相关概念

IBM WebSphere MQ 基本概念 基本概念 1.队列管理器 队列管理器,顾名思义,就是管理消息队列的,它可以确保队列中的消息发送到正确的接收队列中,或者将消息传递至另外一个队列管理器中.队列管理器为每一个调用或者命令生成合适的完成代码. 队列管理器执行的任务有: 启动通道 处理 MQI 调用 创建.删除或改变队列和通道定义 运行命令服务器以处理 MQSC 命令 2.MQ 消息队列 从数据结构的知识知道,Queue是队列,是一个线性容器.MQ(Message Queue)就是存放消息的容

IBM Websphere MQ 基本实验操作

IBM Websphere MQ 基本实验操作 1.1 MQ版本信息 IBM WebSphere MQ V 9.0 1.2 MQ软件环境 Windows Server 2003 1.3 MQ服务器信息 服务器地址:xxxxx 用户名:mqm 密码:****** 1.5 MQ注意事项 1.不支持含有空格的主机名: 2.远程队列中的远程队列名称和远程队列管理器必须与TOP端的本地队列及队列管理器一致: 3.接收方通道名称必须与TOP端发送方通道名称一致,发送方通道名称必须与TOP端接收方通道名称一致