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从队列上接收数据
安装步骤。(此处为转载文章,作者已经证实所有步骤。)
服务端的安装:
1)把WebSphere MQ
Windows版服务器CD-ROM插入CD-ROM驱动器。
2)如果安装了自动运行,那么会启动安装进程。如果不启动,则双击CD-ROM上的根目录中的Setup图标以启动安装程序。
安装启动板"窗口为止。
MQ,则必须先把这些软件装好)。
"+"号以显示安装连接;
- 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"向导。
安装图示

且包含JAVA实现的客户端程序。由此构成一个完整的客户端-服务器的流程。
服务端配置
"开始"->"所有程序"->"IBM
WebSphere MQ"->"WebSphere MQ 资源管理器",进入WebSphere MQ
资源管理器界面。如下图所示:

图9
服务端配置
"QM_JACK"的队列管理器
"队列管理器"->"新建"->"队列管理器",如下图所示:

图10 创建名为"QM_JACK"的队列管理器
"QM_JACK",其他选项默认不变,点"下一步":

图11 在队列管理中输入"QM_JACK"
"下一步":

图12
设置队列日志
TCP/IP上进行队列管理器的远程管理,点击"下一步":

图13 创建服务器连接通道
QM_JACK的侦听端口:8927(用户可以根据需要自行更改端口号),点击"完成"。
图14
设置队列管理器QM_JACK的侦听端口
图15
系统等待界面
QM_JACK创建成功
图16
系统队列管理器QM_JACK创建成功
QM_JACK下创建名为"QUEUE_RECV"和"QUEUE_REPLY"的本地队列(客户可以根据自己的需求随意更改本地队列的名字和数量,这里创建这两个本地队列只是为之后的MQ_Tuxedo项目作准备):

图17 定义本地队列

图18 定义本地队列
"确定"。
QM_JACK下创建名为"CNN_JACK"的服务器通道。
图19
创建服务器连接通道

图20 创建服务器连接通道
CNN_JACK,其他选项保留为系统默认设置,点击"确定"。
MQ服务器端的计算机用户中添加MQ客户端所在计算机的系统用户。比如我的MQ客户端被Suse
Linux下的root用户使用,那么,我们就需要在MQ的服务端(也就是Windows
xp系统中添加名为"root"的用户)所在的计算机系统中添加名为"root"的用户。具体步骤如下:
"开始"->"控制面板"->"计算机管理"->"系统工具"->"本地用户和组"->"用户",点右键,选"新用户",如下图所示:

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

"创建"。
mqm组(注意:这里的mqm组是我们安装完MQ
Server后系统自动创建的)。具体操作如下:

图23
设置系统用户所在组
"属性":

图24 设置系统用户所在组
"添加":
图25
设置系统用户所在组

mqm,点击"确定":

图26 设置系统用户所在组
mqm组中:
图27 设置系统用户所在组

"应用",点击"确定"。
MQ服务端的配置完成。

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
IBM WebSphere MQ介绍安装以及配置服务详解的更多相关文章
- IBM WebSphere MQ介绍安装以及配置服务详解(转)
首先介绍一下MQ MQ消息队列的简称是一种应用程序对应用程序的通信方法.说白了也就是通过队列的方式来对应用程序进行数据通信.而无需专用链接来链接它们. MQ的通讯方式 1.数据报的方式 Datagra ...
- C#自制Web 服务器开发:mysql免安装版配置步骤详解分享
mysql免安装版配置步骤详解分享 1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinst ...
- Python安装、配置图文详解(转载)
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...
- 【和我一起学python吧】Python安装、配置图文详解
Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...
- gcc g++ 安装与配置 入门详解 - 精简归纳
gcc g++ 安装与配置 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 9 / 24 转载请注明出处!️ 目录 gcc g++ 安装与配置 入门详解 - 精简归纳 一.下载MinGW ...
- win10下MYSQL的下载、安装以及配置超详解教程(转)
下载MYSQL 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 进入官网点击Community,下载社区版. 找到MYS ...
- Python安装、配置图文详解
原文地址:http://weixiaolu.iteye.com/blog/1617440 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 ...
- mysql在win系统dos 安装版配置步骤详解
1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32.这 ...
- phpStudy2018安装与配置步骤详解
phpStudy 2018是一款非常强大的php环境调试工具,一次性安装,无须配置即可使用,是非常方便.好用的PHP调试环境.对学习PHP的新手来说,WINDOWS下环境配置是一件很困难的事:对老手来 ...
随机推荐
- Problem C: 默认参数:求圆面积
Description 编写一个带默认值的函数,用于求圆面积.其原型为: double area(double r=1.0); 当调用函数时指定参数r,则求半径为r的圆的面积:否则求半径为1的圆面积. ...
- suse_linux 11 sp3 安装 was7
1.安装操作系统 suse linux 11 1.创建虚拟机 2.下一步 3.稍后安装操作系统,下一步 4.选择操作系统 5.选择存储目录 6.下一步 7.完成 8.编辑虚拟机 9.内存1G,CD/D ...
- redis 解析配置文件
在redis安装文件夹里面有redis.conf,查看配置. 一:基础配置介绍 1.units(单位) --这里可以看到 1k和1kb是不一样的, units 这里单位是不区分大小写的,are al ...
- python+requests+excel 接口自动化框架
一.项目框架如图: 1.common :这个包都是一些公共的方法,如:手机号加解密,get/post接口请求的方法封装,接口鉴权,发邮件,读写excel文件方法等等 2.result:存放每次运行的l ...
- 什么是lambda函数,它有什么好处
编程中提到的lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是值匿名函数. python允许你定义一种单行的小函数.定义lambda函数的形式如下lambda参 ...
- python-web-django前后端交互
1.前端请求数据URL由谁来写 在开发中,URL主要是由后台来写好给前端. 若后台在查询数据,需要借助查询条件才能查询到前端需要的数据时,这时后台会要求前端提供相关的查询参数(即URL请求的参数). ...
- Python 带有参数的装饰器
def wrapper_out(flag): # 装饰器本身的参数 def wrapper(fn): # 目标函数 def inner(*args, **kwargs): # 目标函数执行需要的参数 ...
- Transport & Buffer
Transport 传输API的核心是Channel接口,用于所有的出站操作. 每个Channel都会分配一个ChannelPipeline和ChannelConfig.ChannelConfig负责 ...
- Too much thinking! Too much annoying.
I am now in great demand for an opportunity to yearn for, the ability to express myself, in a maximu ...
- 2.32 js几种定位方法总结
2.32 js几种定位方法总结 前言本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法除了id是定位到的是单个element元素对象, ...