MQ 服务器配置与测试手册
- 格式:doc
- 大小:25.50 KB
- 文档页数:3
一.命名规范1.LV名称确认系统环境标示生产环境 P测试环境 T二.安装MQ前需要确认如下文件系统已经创建,二.操作系统级别参数配置为了避免网恋问题造成通道状态异常,建议修改tc相关参数tcp_keepidle=600tcp_keepinit=150tcp-keepintvl=150系统方面:ulimit -d unlimitedulimie -s unlimited如在AIX上安装,建议修改mqm用户的limit现实编辑/etc/security/limit文件将mqm用户的nofiles,data属性设置为-1(默认2000,262144)三创建队列管理器用以下命令创建队列管理器:crtmqm -If 16384 -lp5 -ls4 <QMGRNAME>注:其中If目的是改变默认的队列管理器日志文件大小,改变后的单个日志文件为4kb*16384kb=64MB;-lp和-ls分别设置队列管理器的主日志个数和辅日志个数。
在建立消息队列管理后,系统初始值只有5个主日志文件。
在创建后,只能修改文件个数,文件大小不能修改。
四 .配置文件参数设置修改最大通道数及最大活动通道数如果架构中存在was,并且应用服务器需要连接到队列管理器,则需要增加MaxChannels/MaxActiveChannels两个参数。
参数值应该大于客户端的数目。
防止由于网恋不稳定的原因导致通道状态问题增加KeepAlive=YES参数在QM.INI中添加:Chanaels:MaxCHannels=1000MaxActiveChanaels=1000TCP:KeepAlive=Yesqm.ini文件的参数需要重启队列管理器生效。
qm.ini仅针对单个队列管理器生效。
五.qmgr属性设置队列管理器相关参数,创建好队列管理器,需为本队列管理器指定死信队列“DEADQ”:define qlocal(DEADQ)alter qmgr deadq(DEADQ)查看队列管理器的配置信息如下:DEADQ,配置死信队列。
一、安装部署1、下载/activemq-5100-release.html,下载5.10.0 WindowsDistribution版本2、安装直接解压至任意目录(如:D:\Software\apache-activemq-5.10.0)3、启动ActiveMQ服务cmd到bin目录下直接运行:activemq.bat start启动成功:4、ActiveMQ消息管理后台系统:http://localhost:8161/admin(随包附带jetty、可直接启动)默认用户名:admin默认密码:admin※在conf/jetty-realm.properties里可以修改用户和密码创建一个Queue二、Queue与Topic 的比较1、JMS Queue 执行load balancer语义:一条消息仅能被一个consumer(消费者) 收到。
如果在message 发送的时候没有可用的consumer,那么它将被保存一直到能处理该message 的consumer 可用。
如果一个consumer 收到一条message 后却不响应它,那么这条消息将被转到另一个consumer 那儿。
一个Queue 可以有很多consumer,并且在多个可用的consumer中负载均衡。
注:点对点消息传递域的特点如下:•每个消息只能有一个消费者。
•消息的生产者和消费者之间没有时间上的相关性。
无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。
2、Topic 实现publish和subscribe 语义:一条消息被publish时,它将发到所有感兴趣的订阅者,所以0到多个subscriber将接收到消息的一个拷贝。
但是在消息代理接收到消息时,只有激活订阅的subscriber能够获得消息的一个拷贝。
注:发布/订阅消息传递域的特点如下:•每个消息可以有多个消费者。
•生产者和消费者之间有时间上的相关性。
订阅一个主题的消费者只能消费自它订阅之后发布的消息。
MQ 移植测试二1 引言1.1 实现目标两个节点安装AiX5.2,做HACMP5.1,两个节点安装WebSphere MQSeries 6.0 for AIX ,其中在一个节点上运行WebSphere MQSeries 6.0,另一节点做备份, 两节点以active-standby 的方式集群,为应用架设运行环境。
1.2 参考资料1) mq_for_aix 快速入门---amqazc03.pdf IBM redbook 2) mc63.tar.Z SupportPac for MQSeries 3) 外网消息服务器的安装配置2 总体设计2.1 系统架构说明两台p650做hacmp ,为active-standby 方式,磁盘阵列划分vg 为db2vg ,我们在p650-01上创建队列管理器:QMOUTGD ,如果机器出现问题,自动切换到第二台机器P650-02上。
Svc:100.2.64.4 Boot:192.168.0.10 Stdby:172.168.0.10Persis:100.2.64.5Svc:100.2.64.4 Boot:192.168.0.11 Stdby:172.168.0.11 Persis:100.2.64.6Vg : db2vg队列管理器:3测试安装需求3.1 硬件环境小型机两台:P650磁盘阵列:fastT600,10*73G,其中2块做hotspare,1~4做raid5,5~8做raid5 3.2 软件环境3.2.1操作系统AIX已安装,版本为5200-043.2.2MQseries 6.0安装文档见《mq在aix上的安装方案.doc》,两台机器都要安装3.2.3HACMP已安装,版本为5.14配置1.在节点1上建立文件系统/MQHA# varyonvg db2vg# smitty fsAdd / Change / Show / Delete File Systems→Enhanced Journaled File Systems→Add an Enhanced Journaled File System→这里选择vg,我们选择db2vgV olume Group Namerootvgdb2vgAdd an Enhanced Journaled File SystemType or select values in entry fields.Press Enter AFTER making all desired changes.[Entry Fields]V olume group name db2vgSIZE of file systemUnit Size MegabytesNumber of units [10000] 输入大小* MOUNT POINT [/MQHA]挂接点Mount AUTOMA TICALLY at system restart? noPERMISSIONS read/writeMount OPTIONS []Block Size (bytes) 4096Logical V olume for LogInline Log size (MBytes) []Extended Attribute Format V ersion 1ENABLE Quota Management? no2.建立目录bin,data,log#mount /MQHA#cd /MQHA#mkdir bin# mkdir data 存放消息队列数据# mkdir log 存放消息队列日志3.修改属主,chown –R mqm:mqm /mq4.把下载的mc63.tar上传到/MQHA/bin下,解压# tar xvf mc63.tar5.创建qmgrs修改hacrtmqmvi hacrtmqm添加两行:unset LIBPA THunset LD_LIBPA THexport MQHAFSDA TA=”/MQHA/data”export MQHAFSLOG=”/MQHA/log”找到这一行,MQSPREFIX=$MQHAFSDA TA su mqm -c "crtmqm -ld $MQHAFSLOG $*"更改为MQSPREFIX=$MQHAFSDA TA su mqm -c "crtmqm –lc –lf 16384 –lp 6 –ls 2 –q $MQHAFSLOG $*"执行./hacrtmqm QMOUTGD6.在节点1把挂接的vg卸掉,然后在节点2挂起节点1:#umount /MQHA#varyoffvg db2vg节点2:#varyonvg db2vg#mount /MQHA7.在节点2执行:su mqm -c "./halinkmqm QMOUTGD QMOUTGD /MQHA/data"8.检查节点2的/var/mqm/mqs.ini,看是否有QMOUTGD的信息QueueManager:Name=QMOUTGDPrefix=/mq/QMOUTGD/dataDirectory=QMOUTGDDefaultQueueManagerName=QMOUTGD如果没有,需要把节点1中mqs.ini内的copy9.在节点2,启动队列管理器:su –mqmstrmqm QMOUTGD10.定义ha应用的启动脚本,拷贝/MQHA/bin下的start、stop脚本到/etc/mqha/下# cd /mq/bin# cp hamqm_start hamqm_stop hamqm_start_su hamqm_stop_su /etc/mqha两个节点都要有编写start.sh 和stop.shvi start.shsu mqm -c /MQHA/bin/hamqm_start_su QMOUTGDsu - mqm -c 'runmqlsr -t tcp -p 1414 -m QMOUTGD &'vi stop.shsu - mqm -c 'endmqlsr -m QMOUTGD'su mqm -c /MQHA/bin/hamqm_stop_su QMOUTGD 6011.修改ha在节点1修改/etc/hosts在最后添加上mqsvr的ip地址12.在节点1配置ha的serivice ip# smitty hacmpInitialization and Standard Configuration→Configure Resources to Make Highly A vailable→Configure Service IP Labels/Addresses→Add a Service IP Label/Address→[Entry Fields]* IP Label/Address [mqsvr]* Network Name [net_ether_01 ] 看实际情况13.配置ha的application serverInitialization and Standard Configuration→Configure Resources to Make Highly A vailable→Configure Application Servers→Add an Application Server→* Server Name [mqapp]* Start Script [/etc/mqha/start.sh]输入启动脚本的位置* Stop Script [/etc/mqha/stop.sh]输入停止脚本的位置14.配置ha的资源组Initialization and Standard Configuration→Configure HACMP Resource Groups→Add a Resource Group—〉* Resource Group Name [mq]输入资源组名* Participating Nodes (Default Node Priority) [] 选在两个节点,Startup Policy Online On Home Node OnlyFallover Policy Fallover To Next Priority Node In The List Fallback Policy Fallback To Higher Priority Node In The List 15.修改资源组Change/Show Resources for a Resource Group (standard) --〉选择岗添加的资源组Move cursor to desired item and press Enter.mqResource Group Name dbParticipating Nodes (Default Node Priority) mq1 mq2Startup Policy Online On Home Node Only Fallover Policy Fallover To Next Priority Node In The ListFallback Policy Fallback To Higher Priority Node In The ListService IP Labels/Addresses [dbsvr] 步骤11种定义的serviceip Application Servers [dbapp] 步骤12种定义的appV olume Groups []Use forced varyon of volume groups, if necessary falseFilesystems (empty is ALL for VGs specified) []16.同步haInitialization and Standard Configuration 〉〉V erify and Synchronize HACMP Configuration .17.检查HA的拓扑图#smitty hacmpExtended Configuration—〉Extended Topology Configuration—〉Show HACMP Topology—〉Show Cluster Topology—〉18.删除队列管理器时的注意事项我们删除队列管理器时,不用hadltmqm,直接用dltmqm来删除同时删除/var/mqm/qmgrs/下的队列管理器/var/mqm/ipc下的队列管理器/MQHA/data/下的队列管理器19.测试在节点1创建队列管理器#smitty clstop[Entry Fields]* Stop now, on system restart or both nowStop Cluster Services on these nodes [mq1]BROADCAST cluster shutdown? true* Shutdown mode takeover 修改查看是否切换到节点2。
MQ服务器配置与测试手册WebShpere MQ 配置与测试一例在“WebSphere MQ程序设计初探”一文中,讨论了从MQ队列管理器的本地队列中放置和读出消息的程序,本文主要通过两台机器,搭建MQ消息传输的环境,并编写测试程序进行测试。
第一、准备工作准备2台Win2000环境(XP也可),通过以太网连通。
机器A:代码为00000000,IP地址为:10.1.1.1机器B:代码为88888888,IP地址为:10.1.1.2安装MQ 5.3第二、创建MQ对象A机器上:1、打开“WebSphere MQ资源管理器”,新建队列管理器,名称为QM_00000000,其余采用默认设置;2、在QM_00000000队列管理器中创建本地队列,名称为LQ_00000000;3、创建传输队列,名称为XQ_88888888(新建时选择“本地队列”,将“用法”设置为“传输”);4、创建远程队列定义,名称为RQ_88888888,指定远程队列名称为LQ_88888888,远程队列管理器名称为QM_88888888,传输队列名称为XQ_88888888;5、创建发送方通道,名称为00000000.88888888,传输协议为TCP/IP,连接名称为10.1.1.2(1414),传输队列为XQ_88888888;6、创建接受方通道,名称为88888888.00000000,采用默认设置;7、创建服务器连接通道,名称为DC.SVRCONN,采用默认设置(该通道主要给后面的测试程序使用)。
B机器和A机器上的操作一样,只是命名不同,如下:1、打开“WebSphe re MQ资源管理器”,新建队列管理器,名称为QM_88888888,其余采用默认设置;2、在QM_88888888队列管理器中创建本地队列,名称为LQ_88888888;3、创建传输队列,名称为XQ_00000000(新建时选择“本地队列”,将“用法”设置为“传输”);4、创建远程队列定义,名称为RQ_00000000,指定远程队列名称为LQ_00000000,远程队列管理器名称为QM_00000000,传输队列名称为XQ_00000000;5、创建发送方通道,名称为88888888.00000000,传输协议为TCP/IP,连接名称为10.1.1.1(1414),传输队列为XQ_00000000;6、创建接受方通道,名称为00000000.88888888,采用默认设置;7、创建服务器连接通道,名称为DC.SVRCONN,采用默认设置。
2.0环境MQ读写配置文档如果存在问题,请大家积极讨论并弥补这个文档中的错误,然后共享给大家---薛新新1.准备资料:①MQ后台页面:http://10.45.26.8:8161/admin/ 账密:admin/admin页面用来查看监控自己的MQ发出去的信息是否到服务器队列中②web工程下面是否有MQ依赖的JS文件<%=WebRoot%>public/script/activemq/amq.js<%=WebRoot%>public/script/activemq/amq_jquery_adapter.js③查看MQ信息配置数据表,需要在ITEM_NAME = 'MQ基础队列定义' 且ITEM_CODE='MQ_QUEUES_DEF' 的数据的ITEM_V ALUE字段加一个新的队列名补充:新增队列要通过管控页面新增,直接sql语句新增会失败,如果为了走通MQ 读写,大家可以先用里面已经定义好的名字先测试增加的新队列信息只需要更改一个名字即可,其他节点可不变,这个名称就是接下来你插入和读取数据需要找到的队列名,如:<mq><serverName>ajaxServer</serverName><name>[your queues name]</name><topic>true</topic><transacted>false</transacted><durable>true</durable><timeToLive>0</timeToLive></mq>④检查web项目src下是否有web.xml文件,如果没有,请从target下的web.cml拷贝进来⑤上述拷贝的web.xml下面检查是否包含MQ的配置信息,没有就贴进去,信息如下:<!-- ******ActiveMQ支持js中Ajax监听****** --><context-param><param-name>org.apache.activemq.brokerURL</param-name><param-value>failover:(tcp://10.45.26.8:61616)?timeout=30000</param-value> <description>The URL of the Message Broker to connect to</description> </context-param><context-param><param-name>org.apache.activemq.embeddedBroker</param-name><param-value>true</param-value><description>Whether we should include an embedded broker or not</description></context-param><!-- 默认是在tomcat7版本以下运行,因为ajax+activemq需要servlet3.0的支持,而servlet3.0又只有在tomcat7中得到支持,所有加上jetty此包,就能在tomcat6运行了。
一、RabbitMQ性能测试简介RabbitMQ是一个高性能、高可靠且易于部署的消息队列中间件。
它可以用于构建分布式系统,实现不同系统之间的消息传递与通信。
在实际应用场景中,对于RabbitMQ的性能表现往往是关注的焦点之一。
为了全面了解RabbitMQ的性能,进行性能测试是非常必要的。
二、RabbitMQ性能测试参数概述RabbitMQ性能测试需要关注的参数包括以下几个方面:1. 消息大小:消息的大小会直接影响RabbitMQ的性能。
通常来说,较小的消息会比较大的消息具有更好的性能表现。
2. 消息持久化:消息是否需要持久化也是一个重要的测试参数。
如果消息需要被持久化,会增加对磁盘的I/O负载,从而影响性能。
3. 消息确认模式:RabbitMQ支持多种消息确认模式,包括ack模式和noack模式等。
不同的消息确认模式对性能的影响是不同的。
4. 并发连接数:并发连接数是指同时与RabbitMQ建立连接的客户端数量。
并发连接数的增加会对RabbitMQ的性能产生一定的影响。
5. 持久化队列和交换机:通过测试持久化队列和交换机的性能,可以评估RabbitMQ在处理持久化消息时的表现。
6. 高可用和镜像队列:测试在高可用集裙环境下RabbitMQ的性能表现,以及镜像队列对性能的影响。
7. 客户端消息确认超时时间:设置客户端消息确认的超时时间,测试在不同的超时时间下RabbitMQ的性能表现。
8. 消息发布速率:测试消息发布的速率,评估RabbitMQ在高负载情况下的性能表现。
9. 用户数量:测试不同数量的用户同时消费消息时RabbitMQ的性能。
10. TCP缓冲区大小:设置TCP缓冲区的大小,测试不同大小的TCP缓冲区对RabbitMQ性能的影响。
11. 用户预取消息数量:设置用户预取消息的数量,测试不同预取消息数量对RabbitMQ性能的影响。
12. 交换机类型:测试不同类型的交换机对RabbitMQ的性能影响。
IBMWebSphereMQ安装及配置详解1. 打开MQ安装程序,选择下⼀步,默认安装WebSphere MQ,2. 完成MQ的安装⼯作,启动WebSphere MQ,3. 服务器配置,选择新建队列管理器,创建名为 "mq"的队列管理器,其他选项默认不变,点"下⼀步"4. 允许在 TCP/IP上进⾏队列管理器的远程管理,点击"下⼀步",完成MQ队列管理器的创建。
5. 新建本地队列,在mq下创建名为"MQ_send"的本地队列(⽤户可以根据⾃⼰的需求更改本地队列的名字和数量),其他选项默认即可。
6. 在 mq下创建名为"MQ_CHL"的服务器通道,其他选项默认即可。
7. 在MQ服务器端的计算机⽤户中添加MQ客户端所在计算机的系统⽤户。
例如:我的MQ客户端所在的计算机⽤户名为Administrator,则在服务器端系统中添加名为"Administrator"的⽤户。
具体步骤如下:<1>点击"开始"->"控制⾯板"->"管理⼯具"->"计算机管理"->"本地⽤户和组"->"⽤户",选择Administrator点右键,打开属性⾯板,选择“⾪属于”把mqmt添加进去。
如下图所⽰:(如果客户端计算机使⽤的其他的⽤户名,在服务器端新建⼀个⽤户名,同样操作,把⽤户名添加⾪属于mqm组⾥⾯)注意:1. 客户端连接MQ服务出现2035错误MQRC_NOT_AUTHORIZED2.找到mq的安装⽬录下的bin⽬录,在cmd环境下执⾏命令runmqsc 然后执⾏命令 alter qmgr chlauth(disabled) 把权限验证下掉就可以了,如下图所⽰:3. MQ常⽤命令:登录MQI,⼀般是cd到MQ安装⽬录下bin,然后切换mqm账户,mqm账户是mq默认的管理员账户。
本安装文档的实测安装环境为较老的Red HatEnterprise Linux 5.5 64位版操作系统,使用的MQ版本为WebSphere MQ7.1Linux试用版,正式版或其他版本的安装步骤可能略有不同,请根据具体情况调整。
MQ安装文件名及下载地址为:WMQ_7.1.0.3_TRIAL_LNX_X86_64_ML.tar.gz。
安装步骤:1. 将安装文件解压到当前目录(使用光盘安装则跳过此步骤):tar -xzvfWMQ_7.1.0.3_TRIAL_LNX_X86_64_ML.tar.gz2. 运行许可证程序:./mqlicense.sh3. 根据提示,输入数字1接受协议。
4. 安装WebSphere MQ for Linux 服务器,即分别安装Runtime、SDK 和Server 软件包:rpm -ivhMQSeriesRuntime-7.1.0-3.x86_64.rpmrpm -ivh MQSeriesSDK-7.1.0-3.x86_64.rpmrpm -ivhMQSeriesServer-7.1.0-3.x86_64.rpm没有必要一次性安装太多组件,如果仅仅是作为服务器使用,安装下面的三个包就足够了。
其它的MQ组件可以按需安装,MQ发行包中包含的主要组件的明细请参见附录。
5. 之后出现提示要验证系统配置是否符合要求,提示的信息及验证结果类似下图:6. 为稳妥起见,我们应将所有标为“FAIL”的检测项调整到“PASS”;例如,针对上图所示的不合格项,我们可以修改 /etc/sysctl.conf文件,添加或修改其中的一些值:kernel.sem = 500256000 250 1024fs.file-max =524288net.ipv4.tcp_keepalive_time= 300要立即使这些sysctl值生效,输入命令 sysctl–p即可。
然后打开/etc/security/limits.conf文件,添加或修改如下配置,设置mqm 用户的最大文件打开数限制:mqm hard nofile 10240mqm soft nofile 102407. 修改完毕之后,重新运行sumqm -c "/opt/mqm/bin/mqconfig"确认我们的修改已经生效,然后就可以进行下一步了;否则重新修改。
IBM WebSphere MQ 配置管理手册济南鲁美达软件技术有限公司2007年9月29日目录IBM WebSphere MQ (1)配置管理手册 (1)1 MQ常用配置管理命令 (3)1.1常用命令 (3)1.2 命令说明 (4)2 远程管理 (5)3 通道维护 (6)4 系统备份 (6)4.1 备份文件 (6)4.2 队列管理器参数 (6)4.3 备份目录和文件 (7)4.3.1 主目录 (7)4.3.2 对象目录文件 (7)4.3.3 日志 (7)4.3.4 同步文件 (7)4.3.5 检查点文件 (8)4.4 系统备份步骤 (8)4.4.1 停止所有通道 (8)4.4.2 执行所有数据备份 (8)4.4.3 停止所有队列管理器 (8)4.4.4 停止所有监听器进程 (8)4.4.5 备份MQSeries (\MQM)目录 (9)4.4.6 启动队列管理器 (9)4.4.7 启动监听器 (9)4.4.8 启动通道 (9)4.4.9 如有问题,重新同步通道 (9)5 系统恢复 (9)5.1 恢复准备工作 (9)5.2 系统恢复步骤 (10)5.2.1 停止通道 (10)5.2.2 停止队列管理器 (10)5.2.3 停止监听器进程 (10)5.2.4 当前日志归档 (11)5.2.5 恢复队列管理器文件 (11)5.2.6 重启队列管理器:strmqm QM_NAME (11)5.2.7 重启监听器 (11)5.2.8 启动通道 (11)5.2.9 如需要,重新同步通道 (12)5.3 注意事项 (12)1MQ常用配置管理命令1.1常用命令创建队列管理器: crtmqm -q QMgrName -q是指创建缺省的队列管理器删除队列管理器dltmqm QmgrName启动队列管理器strmqm QmgrName 如果是启动默认的队列管理器,可以不带其名字停止队列管理器endmqm QmgrName 受控停止endmqm -i QmgrName 立即停止endmqm -p QmgrName 强制停止显示队列管理器dspmq -m QmgrName运行MQSeries命令, 如果是默认队列管理器,可以不带其名字runmqsc QmgrName往队列中放消息, 如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字amqsput QName QmgrName从队列中取消息,如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字amqsget QName QmgrName启动通道runmqchl -c ChlName -m QmgrName启动侦听runmqlsr -t TYPE -p PORT -m QMgrName停止侦听endmqlsr -m QmgrName定义死信队列DEFINE QLOCAL(QNAME)DEFPSIST(YES) REPLACE // DEFPSIST(YES):意思是重启后消息继续保留设定队列管理器的死信队列ALTER QMGR DEADQ(QNAME) alter qmgrdeadq(SYSTEM.DEAD.LETTER.QUEUE)定义本地队列DEFINE QL(QNAME) REPLACE定义别名队列DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)远程队列定义DEFINE QREMOTE(QRNAME)RNAME(AAA) RQMNAME(QMGRNAME)XMITQ (QTNAME)定义模型队列DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)本地传输队列DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) INITQ(SYSTEM.CHANNEL.INITQ)PROCESS(PROCESSNAME) REPLACE创建进程定义DEFINE PROCESS(PRONAME) DESCR(‘STRING’)APPLTYPE(WINDOWSNT)APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等创建发送方通道DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
MQ配置文档说明手册MQ配置文档说明手册第一章中间件消息通信技术概要一、中间件中间件,就是介于应用系统与系统软件之间的一类软件,它使用系统软件所提供的基础功能,衔接于应用系统的不同部分,能够达到资源共享和功能共享的目的。
消息中间件,是中间件众多产品分类中一个重要部分。
它能够适用于任何需要进行网络通信的系统,负责建立网络通信的通道,进行数据或文件发送。
消息中间件的一个重要作用是可以实现跨平台操作,为不同操作系统上的应用软件集成提供服务。
二、几种通信技术的比较1、CPI-CCPI-C是一种同步对话通信模式。
参加通信的一方发起一次对话,同时控制信息流动。
数据既可以由发送者传递到接受者,也可以反向流动。
参加通信的两个程序需要跟踪对话的状态,如果异常发生导致连接中断,则需要发送方重建并恢复这次通话。
通信双方既可以处于主从地位,也可以处于对等地位。
也就是说,CPI-C既支持客户端-服务器环境,也支持对等通信方式。
虽然CPI-C在一般情况下是一种同步通信类型,但是在一定环境中,如CICS,可以通过―临时数据队列‖实现一定程度的异步。
TCP/IP,SNA都支持CPI-C。
由于需要应用程序参与错误的检测与恢复,CPI-C的编程接口相当复杂。
2、RPCRPC,即远程过程调用,也是一种同步,对话方式的类型。
一个调用程序向服务器提成申请,该调用被负责通信的转接器发往远端系统。
调用者与被调用者关系是固定的,很难实现对等通信。
与CPI-C一样,通信错误需要应用程序自己维护。
另外在申请服务得到响应之前,服务申请者被阻隔,这不仅是应用的瓶颈所在,更有可能遭受拒绝式服务攻击。
3、MQI(Message Queue Interface)消息队列接口为程序提供了一种异步通信方式。
一个程序以一个队列作为中转与另一个程序相互通信,这个队列向对于该程序而言既可以是本地,也可以是远程。
当程序A与程序B进行通信时,A只需要将消息放入一条与B相通信的队列即可,至于消息何时,以何种协议,何种方式到达程序B与A没有关系。
WebShpere MQ 配置与测试一例
在“WebSphere MQ程序设计初探”一文中,讨论了从MQ队列管理器的本地队列中放置和读出消息的程序,本文主要通过两台机器,搭建MQ消息传输的环境,并编写测试程序进行测试。
第一、准备工作
准备2台Win2000环境(XP也可),通过以太网连通。
机器A:代码为00000000,IP地址为:10.1.1.1
机器B:代码为88888888,IP地址为:10.1.1.2
安装MQ 5.3
第二、创建MQ对象
A机器上:
1、打开“WebSphere MQ资源管理器”,新建队列管理器,名称为QM_00000000,其余采用默认设置;
2、在QM_00000000队列管理器中创建本地队列,名称为LQ_00000000;
3、创建传输队列,名称为XQ_88888888(新建时选择“本地队列”,将“用法”设置为“传输”);
4、创建远程队列定义,名称为RQ_88888888,指定远程队列名称为LQ_88888888,远程队列管理器名称为QM_88888888,传输队列名称为XQ_88888888;
5、创建发送方通道,名称为00000000.88888888,传输协议为TCP/IP,连接名称为10.1.1.2(1414),传输队列为XQ_88888888;
6、创建接受方通道,名称为88888888.00000000,采用默认设置;
7、创建服务器连接通道,名称为DC.SVRCONN,采用默认设置(该通道主要给后面的测试程序使用)。
B机器和A机器上的操作一样,只是命名不同,如下:
1、打开“WebSphere MQ资源管理器”,新建队列管理器,名称为QM_88888888,其余采用默认设置;
2、在QM_88888888队列管理器中创建本地队列,名称为LQ_88888888;
3、创建传输队列,名称为XQ_00000000(新建时选择“本地队列”,将“用法”设置为“传输”);
4、创建远程队列定义,名称为RQ_00000000,指定远程队列名称为LQ_00000000,远程队列管理器名称为QM_00000000,传输队列名称为XQ_00000000;
5、创建发送方通道,名称为88888888.00000000,传输协议为TCP/IP,连接名称为10.1.1.1(1414),传输队列为XQ_00000000;
6、创建接受方通道,名称为00000000.88888888,采用默认设置;
7、创建服务器连接通道,名称为DC.SVRCONN,采用默认设置。
第三、消息测试
在A、B机器上分别启动其发送方通道,正常情况通道状态应为“正在运行”。
通过如下测试程序进行测试,文件名为:MQTest.java,在机器A上进行运行(如在B上运行请读者自行适当修改)。
import java.io.IOException;
import java.util.Hashtable;
import com.ibm.mq.MQException;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
public class MQSample{
//定义队列管理器和队列的名称
private static String qmName = "QM_00000000";
private static String qName = "RQ_88888888";
private static MQQueueManager qMgr;
private static Hashtable properties = new Hashtable();
public static void main(String args[]) {
try {
properties.put("hostname", "10.1.1.1");
properties.put("port", new Integer(1414));
properties.put("channel", "DC.SVRCONN");
properties.put("CCSID", new Integer(1381));
properties.put("transport","MQSeries");
// Create a connection to the queue manager
qMgr = new MQQueueManager(qmName,properties);
// Set up the options on the queue we wish to open...
int openOptions = 16;
// Now specify the queue that we wish to open,
// and the open options...
MQQueue remoteQ = qMgr.accessQueue(qName, openOptions);
// Define a simple WebSphere MQ message, and write some text in UTF format..
MQMessage putMessage = new MQMessage();
putMessage.writeUTF("Test");
// specify the message options...
MQPutMessageOptions pmo = new MQPutMessageOptions();
// accept the defaults, same as MQPMO_DEFAULT
// put the message on the queue
remoteQ.put(putMessage,pmo);
System.out.println("Message has been input into the Remote Queue");
// Close the queue...
remoteQ.close();
// Disconnect from the queue manager
qMgr.disconnect();
}catch (MQException ex) {
// If an error has occurred in the above, try to identify what went wrong
// Was it a WebSphere MQ error?
System.out.println("A WebSphere MQ error occurred : Completion code " +
pletionCode +
" Reason code " + ex.reasonCode);
}catch (IOException ex) {
// Was it a Java buffer space error?
System.out.println("An error occurred whilst writing to the message buffer: " + ex);
}catch(Exception ex){
ex.printStackTrace();
}
}
}。