IBM Websphere Integration Developer 6.1

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

基本功能:将信息以消息的形式,从一个应用程序传送到另一个或多个应用程序。

主要特点
  • 消息异步接受,类似手机短信的行为,消息发送者不需要等待消息接受者的响应,减少软件多系统集成的耦合度;
  • 消息可靠接收,确保消息在中间件可靠保存,只有接收方收到后才删除消息,多个消息也可以组成原子事务。

消息中间件的主要应用场景

公司在发展过程中,开发(或者购买了)多套企业信息系统,比如财务系统,人事系统,在线销售系统,运营系统等。

这些系统生产/消费公司的各种业务数据。

公司需要将这些系统集成(整合),比如让在线销售系统的订单数据输入到财务系统中。

类似应用的一般系统需求是:
  • 可靠传输,数据不能丢失,有的时候,也会要求不能重复传输;
  • 异步传输,否则各个系统同步发送接受数据,互相等待,造成系统瓶颈。

公司可以为此开发自己的软件服务,代价会比较大,现在一般使用已经成型的消息中间件

目前比较知名的消息中间件:

  • IBM MQSeries
  • BEA WebLogic JMS Server
  • Oracle AQ
  • Tibco
  • SwiftMQ
  • AcitveMQ:是免费的java实现的消息中间件

什么是JMS

JMSJavaMessageService,Java消息服务。

和消息中间件的关系,类似于DBMS和JDBC的关系。

JMS是个标准,见:java.sun.com/products/jms/

目前版本是1.1。

JMS是J2EE(JavaEE)标准的一部分。

ActiveMQ的简单使用

简介

ActiveMQ,网址:activemq.apache.org/

目前是Apache下的一级项目。

免费开源由java编写符合JMS1.1标准的消息中间件。

另外,它也支持通过除java语言外的语言的使用:
  • PHP
  • C/C++
  • C#
  • Ruby
  • Perl
  • Python

简单使用

本文操作系统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 runmqlsr

10.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

相关推荐