activemq 2008-08-14
G:\ibm_soft\IBM_WID_6.0.2
E:\lindows\IBMWID-6.0.2\disk1
E:\lindows\IBMWID-6.0.2\disk2
E:\lindows\IBMWID-6.0.2\disk3
E:\lindows\IBMWID-6.0.2\disk4
E:\lindows\IBMWID-6.0.2\disk5
E:\lindows\IBMWID-6.0.2\disk6
Z:\>ls -l
total0
drwxrwxrwx1usergroup0Sep82009IBMWID_6.0.2
drwxrwxrwx1usergroup0Aug272008wid6022_fixpack
drwxrwxrwx 1 user group 0 Aug 27 2008 wid6022_interim_fix001面向消息的中间件和ActiveMQ的介绍
面向消息的中间件:Message-orientedMiddleware,MOM
基本功能:将信息以消息的形式,从一个应用程序传送到另一个或多个应用程序。
主要特点:消息中间件的主要应用场景:
公司在发展过程中,开发(或者购买了)多套企业信息系统,比如财务系统,人事系统,在线销售系统,运营系统等。
这些系统生产/消费公司的各种业务数据。
公司需要将这些系统集成(整合),比如让在线销售系统的订单数据输入到财务系统中。
类似应用的一般系统需求是:公司可以为此开发自己的软件服务,代价会比较大,现在一般使用已经成型的消息中间件。
目前比较知名的消息中间件:
JMSJavaMessageService,Java消息服务。
和消息中间件的关系,类似于DBMS和JDBC的关系。
JMS是个标准,见:java.sun.com/products/jms/
目前版本是1.1。
JMS是J2EE(JavaEE)标准的一部分。ActiveMQ,网址:activemq.apache.org/
目前是Apache下的一级项目。
免费开源由java编写符合JMS1.1标准的消息中间件。
另外,它也支持通过除java语言外的语言的使用:本文操作系统WindowsXP。
SUNJDK1.6.0_03。
启动:
进入${active-mq}\bin目录。
运行activemq.bat
检查安装是否成功:
命令行执行如下命令netstat -an|find "61616"
显示如下内容表示启动成功:
TCP 0.0 . 0.0 : 61616 0.0 . 0.0 : 0 LISTENING
创建队列:
最简单的办法是使用java6提供的jconsole,使用方法见:marshal.iteye.com/blog/138879
在jconsole中使用activemq提供的MBean创建队列。
向ActiveMQ发送消息:
接收信息:
使用该队列的browse方法获取。
删除队列:
使用broker/操作/removeQueue方法删除。使用JMSAPI,发送和接收队列、主题中的消息,可以结合Spring简化开发。
第三方图形化客户端,比如hermesjms:www.hermesjms.com,是免费的javaswing编写的JMS客户端。
还有其他基于web的客户端。-----------------------------------------------------------------------------------------------------------------------------------
ibm.com/cn/services/learning IBM 培训、服务、认证
http://www.ibm.com/developerworks/cn/offers/sek/
2008 年最新 IBM 软件试用版 DVD,免费征订!
MQ安装笔记
http://blog.chinaunix.net/u2/66227/showart_528787.html
MQ安装笔记
实验环境(11-1.1369_FC4)
==========================================================================================
MQ安装包(Qv600Trial-x86_linux_2.tar.gz)
mqlicense.sh(该脚本需要该两处地方)
# Set JRE location JRE=/usr/local/mq/lap/IBMJava2-142/jre/bin/java
#Setclasspath
LAPCLASSPATH=${PROGPATH?}/lap/${LAP_JAR}:${PROGPATH?}/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/rt.jar:${PROGPATH?}/lap/jre/lib/i18n.jar
==========================================================================================================[root@10 mq]# ./mqlicense.sh -accept
Licensed Materials - Property of IBM
5724-H72
(C) Copyright IBM Corporation 1994, 2005 All rights reserved.
US Government Users Restricted Rights - Use, duplication or disclosurerestricted by GSA ADP Schedule Contract with IBM Corp.
Agreement accepted: Proceed with install.
====================================================================================================
[root@10mq]#rpm-ivhMQSeriesRuntime-6.0.0-0.i386.rpm
Preparing...###########################################[100%]
1:MQSeriesRuntime###########################################[100%]
[root@10mq]#rpm-vihMQSeriesSDK-6.0.0-0.i386.rpm
Preparing...###########################################[100%]
1:MQSeriesSDK###########################################[100%]
[root@10mq]#rpm-ivhMQSeriesServer-6.0.0-0.i386.rpm
Preparing...###########################################[100%]
1:MQSeriesServer ########################################### [100%][root@10 mq]# rpm -ivh MQSeriesClient-6.0.0-0.i386.rpm
Preparing...###########################################[100%]
1:MQSeriesClient###########################################[100%]
[root@10mq]#rpm-ivhMQSeriesSamples-6.0.0-0.i386.rpm
Preparing...###########################################[100%]
1:MQSeriesSamples ########################################### [100%]======================================================================================================
[mqm@aaaa~]$cat.bash_profile
# .bash_profile# Get the aliases and functions
if[-f~/.bashrc];then
.~/.bashrc
fi# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
unsetUSERNAME
exportLD_ASSUME_KERNEL=2.2.5
exportAMQ_INHIBIT_DLCLOSE=TRUEexport
export LC_all=en_US======================================================================================
创建缺省的队列管理器
[mqm@10~]$crtmqm-qMQ1
Thereare90daysleftinthetrialperiodforthiscopyofWebSphereMQ.
WebSphereMQqueuemanagercreated.
CreatingorreplacingdefaultobjectsforMQ1.
Defaultobjectsstatistics:40created.0replaced.0failed.
Completingsetup.
Setup completed.启动队列管理器
[mqm@10~]$strmqmMQ1
Thereare90daysleftinthetrialperiodforthiscopyofWebSphereMQ.
WebSphere MQ queue manager running.停止队列管理器的几种方法
[mqm@aaaaQM1]$endmqmQM1 受控停止
[mqm@aaaaQM1]$endmqm-iQM1 立即停止
[mqm@aaaa QM1]$ endmqm -p QM1 强制停止删除队列管理器
[mqm@10~]$dltmqmQM2
WebSphere MQ queue manager 'QM2' deleted.查看队列管理器的状态
[mqm@10~]$dspmq-mQM1
QMNAME(QM1) STATUS(Running)启动侦听
[mqm@aaaabin]$runmqlsr-ttcp-p1515-mQM1&
[1]20752
[mqm@aaaa bin]$ 5724-H72 (C) Copyright IBM Corp. 1994, 2005. ALL RIGHTS RESERVED.停止侦听
[mqm@aaaabin]$endmqlsr-mQM1
A WebSphere MQ listener will end shortly.运行MQSeries命令
[mqm@10 ~]$ runmqsc QM1
5724-H72(C)CopyrightIBMCorp.1994,2005.ALLRIGHTSRESERVED.
Starting MQSC for queue manager QM1.:
清除队列中的所有消息
clearql('DL1')
2:clearql('DL1')
AMQ8022: WebSphere MQ queue cleared.删除队列
deleteqlocal(CSDL3)
6:deleteqlocal(CSDL3)
AMQ8007: WebSphere MQ queue deleted.delete qremote(RDL3)
11:deleteqremote(RDL3)
AMQ8007: WebSphere MQ queue deleted.==================================================================================
单向发送:
示例
发送方QM1
define qlocal ('CSDL1') usage (XMITQ)
DEFINEQREMOTE('RDL1')RQMNAME('QM2')RNAME('DL2')XMITQ('CSDL1')
definechannel(CH1)chltype(SDR)conname('10.4.5.212(1414)')xmitq(CSDL1)
runmqchl -c CH1 -m QM1 &接收方QM2
define ql (DL2) replace
definechannel(CH1)chltype(RCVR)
runmqlsr -t tcp -p 1414 -m QM2 &==================================================================================
接收:
[mqm@10bin]$./amqsputRDL1QM1
SampleAMQSPUT0start
targetqueueisRDL1
hello
thee
gdd
eee[mqm@fc4-test bin]$ ./amqsget DL2 QM2
SampleAMQSGET0start
message<hello>
message <thee>message<gdd>
message<eee>
nomoremessages
Sample AMQSGET0 end=====================================================================================
双向发送:
示例
发送方QM1
define qlocal ('CSDL1') usage (XMITQ)
DEFINEQREMOTE('RDL1')RQMNAME('QM2')RNAME('DL2')XMITQ('CSDL1')
definechannel(CH1)chltype(SDR)conname('10.4.5.212(1414)')xmitq(CSDL1)
runmqchl -c CH1 -m QM1 &define ql (DL1) replace
definechannel(CH2)chltype(RCVR)
runmqlsr -t tcp -p 1515 -m QM1 &接收方QM2
define ql (DL2) replace
definechannel(CH1)chltype(RCVR)
runmqlsr -t tcp -p 1414 -m QM2 &define qlocal ('CSDL2') usage (XMITQ)
DEFINEQREMOTE('RDL2')RQMNAME('QM1')RNAME('DL1')XMITQ('CSDL2')
definechannel(CH2)chltype(SDR)conname('10.4.5.211(1515)')xmitq(CSDL2)
runmqchl -c CH2 -m QM2 &=================================================================================
接收
[mqm@fc4-testbin]$./amqsputRDL2QM2
SampleAMQSPUT0start
targetqueueisRDL2
heell[mqm@10bin]$./amqsgetDL1QM1
SampleAMQSGET0start
message<heell>
nomoremessages
Sample AMQSGET0 end==================================================================================
进程列表:(监听端口、通道)
10.4.5.211
[mqm@aaaabin]$psux|grep'runmqchl'
mqm110610.02.0207322632pts/0S00:050:00runmqchl-cCH1-mQM1
mqm110620.02.0207322632pts/0S00:050:00runmqchl-cCH1-mQM1
mqm110630.02.0207322632pts/0S00:050:00runmqchl-cCH1-mQM1
mqm110640.02.0207322632pts/0S00:050:00runmqchl-cCH1-mQM1
mqm110650.02.0207322632pts/0S00:050:00runmqchl-cCH1-mQM1
mqm118970.00.028496pts/0R+00:430:00greprunmqchl
[mqm@aaaabin]$psux|grep'runmqlsr'
mqm116050.01.8171362284pts/0S00:310:00runmqlsr-ttcp-p1515-mQM1
mqm116060.01.8171362284pts/0S00:310:00runmqlsr-ttcp-p1515-mQM1
mqm116070.01.8171362284pts/0S00:310:00runmqlsr-ttcp-p1515-mQM1
mqm116080.01.8171362284pts/0S00:310:00runmqlsr-ttcp-p1515-mQM1
mqm116090.01.8171362284pts/0S00:310:00runmqlsr-ttcp-p1515-mQM1
mqm 11914 0.0 0.3 3736 424 pts/0 R+ 00:43 0:00 grep runmqlsr10.4.5.212
[mqm@fc4-testbin]$psux|grep'runmqlsr'
mqm197600.01.8171362280pts/1S01:050:00runmqlsr-ttcp-p1414-m
mqm197610.01.8171362280pts/1S01:050:00runmqlsr-ttcp-p1414-m
mqm197620.01.8171362280pts/1S01:050:00runmqlsr-ttcp-p1414-m
mqm197630.01.8171362280pts/1S01:050:00runmqlsr-ttcp-p1414-m
mqm197640.01.8171362280pts/1S01:050:00runmqlsr-ttcp-p1414-m
[mqm@fc4-testbin]$psux|grep'runmqchl'
mqm203470.02.0207322628pts/1S01:320:00runmqchl-cCH2-mQM2
mqm203480.02.0207322628pts/1S01:320:00runmqchl-cCH2-mQM2
mqm203490.02.0207322628pts/1S01:320:00runmqchl-cCH2-mQM2
mqm203500.02.0207322628pts/1S01:320:00runmqchl-cCH2-mQM2
mqm203510.02.0207322628pts/1S01:320:00runmqchl-cCH2-mQM2
mqm 20606 0.0 0.2 1688 360 pts/1 R+ 01:44 0:00 grep runmqchl=======================================================
[mqm@aaaa ~]$ runmqsc
5724-H72(C)CopyrightIBMCorp.1994,2005.ALLRIGHTSRESERVED.
Starting MQSC for queue manager QM1.检查当前的通道状态
disCHS('CH1')
16:disCHS('CH1')
AMQ8417:DisplayChannelStatusdetails.
CHANNEL(CH1)CHLTYPE(SDR)
CONNAME(10.4.5.212(1414))CURRENT
RQMNAME(QM2)STATUS(RUNNING)
SUBSTATE(MQGET) XMITQ(CSDL1)查看队列:
disQUEUE(RDL1)
AMQ8409:DisplayQueuedetails.
QUEUE(RDL1)TYPE(QREMOTE)
ALTDATE(2007-02-21)ALTTIME(07.00.39)
CLUSNL()CLUSTER()
CLWLPRTY(0)CLWLRANK(0)
DEFBIND(OPEN)DEFPRTY(0)
DEFPSIST(NO)DESCR()
PUT(ENABLED)RQMNAME(QM2)
RNAME(DL2)SCOPE(QMGR)
XMITQ(CSDL1):
查看队列深度:
displayqstatus('CSDL1')
AMQ8450:Displayqueuestatusdetails.
QUEUE(CSDL1)TYPE(QUEUE)
CURDEPTH(0)IPPROCS(1)
LGETDATE()LGETTIME()
LPUTDATE()LPUTTIME()
MONQ(OFF)MSGAGE()
OPPROCS(1)QTIME(,)
UNCOM(NO):
=========================================================
MQ错误日志的位置
a、当队列管理器名称已知,并且队列管理器可用时,错误日志位于/var/mqm/qmgrs/qmname/errors目录下,如:与MQ通道有关的消息
b、队列管理器不可用时,错误日志位于/var/mqm/qmgrs/@SYSTEM/errors目录下
c、错误是与Client 应用程序有关,错误日志位于: /var/mqm/errors 目录下MQSeries队列中存放的数据量有上限吗?队列文件大小的限制是什么吗?
在MQSeries产品中,每一个本地队列都对应于文件系统中的一个文件,为了避免单个队列无控制的占用大量磁盘空间,导致系统资源问题,
MQSeries对单个队列文件的最大字节数做了一个限制。在MQSeriesV5.0中,这个阀值是320MB,也就是说对于一个本地队列,它所对应的
队列文件不能大于320MB,(队列文件的大小主要取决于队列中所存放的消息个数以及每个消息的长度)。常规情况下320MB对于单个队列
来说是足够大的,但在某些特殊情况下,用户可能的确需要单个队列能拥有更大的文件系统空间,所以MQSeries提供了优化参数供用户来调整
这个限制的大小。阀值可以最大调到1GB,即每个队列文件最大可以占有1GB的磁盘空间。从另一个角度上看,在另外的一些系统中,可能用
户的需求是要限制每个队列的大小,这时320MB可能又显得太大了,同样我们也可以利用这个参数来限制队列文件的最大容量。这个参数的最小值是20MB,即每个队列文件最大只能有20MB。对于最新的MQSeries V5.1,默认的队列文件大小阀值已设为2GB,不可以再调大,
但可以调小,最小到20MB。另外一点需要注意的是,修改这个参数对已经创建出的队列是没有效果的,对某个队列而言,它所对应队列文件的大
小在队列创建时就已经确定。所以修改这个参数只会影响到新建的队列。对于UNIX和OS/2上5.0,5.1版本以及NT上5.0版本的MQSeries,在队列管理器的qm.ini文件中加入以下一段:
TuningParameters:
DefaultQFileSize=1000000000
上例中的1000000000代表队列文件大小阀值,对V5.0,取值范围,如上所述(20000000-1000000000);对V5.1,取值范围是(20000000-2000000000)。通道类型的组合形式有哪几种?如何使用?
由发送方启动通道, 发送方请求接收方通道启动, 并将其传输队列中的消息发送给接收方,接收方将消息传送给目标队列.请求-服务器通道(Requester-server)
由请求方启动通道. 请求方请求服务器方启动通道, 服务器方将它的传输队列中的消息发给请求方.
服务器方也可以启动通道,但这只有对通道的conname属性中定义了请求方联接名称时适用.称为完整定义的服务器(Fullyqualifiedserver).
请求-发送通道(Requester-sender)由请求方启动通道,但发送方终止该请求并根据它的通道定义信息重新启动通道(callback). 并将传输队列中的消息发给请求方.服务器-接收通道(Server-receiver)
类似于发送-接收通道, 但只对完整定义的服务器(在CONNAME中定义了对方联接名称)适用. 通道启动必须由服务器方发起.
进一步详细信息请参照 MQSeries Intercommunication 联机手册
===============================================================
包括MQ的安装学习和MQ的基础命令操作,以及最后能配置一个MQ远程通信。安装部分主要注意mqlicense.sh文件的配置,基础命令操作部分需注意严格遵守MQ命令的格式规范,并了解每个参数的含义达到正确使用。加强命令的练习。配置MQ通信部分,要保证一个MQ能够单向远程通信,需注意几点。对于Sender这块,首先要有一个队列管理器,建立一个传输队列,建立一个远程队列,建立一个通道。无需建立本地队列。对于Receive这块,首先要有一个队列管理器,建立一个本地队列,建立一个与发送方通道名字一样的接受通道。在Sender和Receive预备工作做好之后,首先要在Receive启动侦听,然后再到Sender启动通道。这样就能实现Sender->Receive单向通信了。对于双向通信这里不再赘述
最近在配置MQ,记下了一些常用的MQ命令,如下:
创建队列管理器
crtmqm–qQMgrName
-q是指创建缺省的队列管理器删除队列管理器 dltmqm QmgrName
启动队列管理器
strmqmQmgrName
如果是启动默认的队列管理器,可以不带其名字停止队列管理器 endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 强制停止
显示队列管理器 dspmq –m QmgrName
运行MQ命令
runmqscQmgrName
如果是默认队列管理器,可以不带其名字往队列中放消息
amqsputQNameQmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字从队列中取出消息
amqsgetQNameQmgrName
如果队列是默认队列管理器中的队列,可以不带其队列管理器的名字启动通道 runmqchl –c ChlName –m QmgrName
启动侦听 runmqlsr –t TYPE –p PORT –m QMgrName
停止侦听 endmqlsr -m QmgrName
下面是在MQ环境中可以执行的MQ命令(即在runmqsc环境下可以敲的命令)
定义持久信队列 DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
设定队列管理器的持久信队列 ALTER QMGR DEADQ(QNAME)
定义本地队列 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
创建进程定义
DEFINEPROCESS(PRONAME)DESCR(‘STRING’)APPLTYPE(WINDOWSNT)APPLICID(’runmqchl-cSDR_TEST-mQM_TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等创建发送方通道
DEFINECHANNEL(SDRNAME)CHLTYPE(SDR)CONNAME(‘100.100.100.215(1418)’)XMITQ(QTNAME)REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。创建接收方通道 DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
创建服务器连接通道 DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
显示队列的所有属性 DISPLAY QUEUE(QNAME) [ALL]
显示队列的所选属性
DISPLAYQUEUE(QNAME)DESCRGETPUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH显示队列管理器的所有属性 DISPLAY QMGR [ALL]
显示进程定义 DISPLAY PROCESS(PRONAME)
更改属性
ALTERQMGRDESCR(‘NEWDESCRIPTION’)
ALTERQLOCAL(QNAME)PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)删除队列
DELETEQLOCAL(QNAME)
DELETE QREMOTE(QRNAME)清除队列中的所有消息 CLEAR QLOCAL(QNAME)
以下是一些高级配置的命令:
amqmcert 配置SSL证书
amqmdain 配置windows上的MQ服务
crtmqcvx 转换数据
dmpmqaut 转储对象权限管理
dmpmqlog 转储日志管理
dspmq 显示队列管理器 //Tivoli O
dspmqaut 显示打开对象的权限
dmpmqcap 显示处理程序容量和处理程序数
dspmqcsv 显示命令服务器状态
dspmqfls 显示文件名
dspmqtrc 跟踪MQ输出(HP-UNIX LINUX Solaris)
dspmqrtn 显示事务的详细信息
endmqcsv 停止队列管理器上的命令服务器
strmqcsv 启动队列管理器上的命令服务器
endmqtrc 停止跟踪
rcdmqimg 向日志写对象的映像
rcmqobj 根据日志中的映像重新创建一个对象
rsvmqtrn 提交或逆序恢复事务
end