您的位置:首页 > 其它

.Net环境下操作IBM WebShpere MQ

2007-04-16 11:15 337 查看
.Net环境下操作IBM WebShpere MQ

大约在两年前项目使用了IBM MQ,本人积累了部分在.Net环境下操作IBM MQ的经验。现将经验与大家分享。

IBM WebShpere MQ 简单介绍:

具体的详细信息大家可以在IBM的网站和网上有许多的学习资料。

IBM MQ是实现了消息队列的一个中间件,它可以运行在现在所有流行的平台上。在我们的项目中主要使用的是AS400和UNIX平台上。

在IBM MQ中主要分为以下几个对象:

Queue Manager

队列管理器

主要负责管理队列、通道等,类似与Oracle中的Oracle实例的概念,在一台服务器中可以定义多个Queue Manager。

Queue

队列

是存放Message的对象,是我们主要操作的对象。类似与Oracle中的表的概念。

Message

消息

实际放入Queue中的消息,该消息可以存储字符串、Stream等对象。

Channel

通道

是我们的应用以及两个Queue Manager操作的链接对象

Process

过程

Queue的分类:

Local Queue

本地队列

主要存储消息的对象

Remote Queue

远程队列

和另外一个Queue Manager通讯的队列

Mode Queue

模板队列

建立一个队列模板,通过这个模板可以建立与模板相同属性的动态队列。

Dynamic Queue

动态对了(临时队列)

可以在程序中创建和删除的临时队列

Channel类型:

在我们介绍中只使用了类型为SVRCONN的通道。

.Net连接Queue Manager的关键要素:

.Net的程序需要以下几个关键要素才能连接的一个Queue Manager上。

1、 Address & Port

MQ的服务器地址以及要连接的Queue Manager的监听端口,默认端口1414。

2、 Queue Manager Name

要连接的Queue Manager的名字,区分大小写,默认全部大写。

3、 Channel Name

SVRCONN类型的Channel的名字,需要注意的是该Channel的属性MCAUSER必须设置为一个足够权限的系统用户,否则不能连接成功。

4、 CCSID

CCSID是Queue Manager的编码字符集,需要Queue Manager的CCSID与你的.Net操作系统的CCSID互相兼容或者一致才能成功连接。默认情况下UNIX平台的Queue Manager的CCSID为819,而简体中文版的Windows的CCSID为1381。这两个编码字符集是不能兼容的,所以需要调整。

调整有两种方式:

1) 调整Queue Manager的CCSID,调整成与1381兼容的即可,不一定需要调整成1381

2) 在不能调整Queue Manager时需要配置Windows的环境变量,在Windows的环境变量中增加MQCCSID的环境变量,值需要与Queue Manager的CCSID一致或兼容。

在我们介绍的例子中使用环境如下:

Server:Sun OS 5.9

Address

192.168.128.115

Port

1414(默认端口)

Queue Manager Name

SGS.MGR

Channel Name

SGS.CHANNEL

Queue Manager的属性如下(注意红色部分):

Display Queue Manager details.

DESCR( ) DEADQ( )

DEFXMITQ( ) CHADEXIT( )

CLWLEXIT( ) CLWLDATA( )

REPOS( ) REPOSNL( )

COMMANDQ(SYSTEM.ADMIN.COMMAND.QUEUE) QMNAME(SGS.MGR)

CRDATE(2007-04-02) CRTIME(16.24.23)

ALTDATE(2007-04-02) ALTTIME(16.24.23)

QMID(SGS.MGR_2007-04-02_16.24.23) TRIGINT(999999999)

MAXHANDS(256) MAXUMSGS(10000)

AUTHOREV(DISABLED) INHIBTEV(DISABLED)

LOCALEV(DISABLED) REMOTEEV(DISABLED)

PERFMEV(DISABLED) STRSTPEV(ENABLED)

CHAD(DISABLED) CHADEV(DISABLED)

CLWLLEN(100) MAXMSGL(4194304)

CCSID(819) MAXPRTY(9)

CMDLEVEL(510) PLATFORM(UNIX)

SYNCPT DISTL(YES)

Channel的属性如下(注意红色部分):

Display Channel details.

CHANNEL(SGS.CHANNEL) CHLTYPE(SVRCONN)

TRPTYPE(TCP) DESCR( )

SCYEXIT( ) MAXMSGL(4194304)

SCYDATA( ) HBINT(300)

MCAUSER(mqm) ALTDATE(2007-04-02)

ALTTIME(16.30.23)

SENDEXIT( )

RCVEXIT( )

SENDDATA( )

RCVDATA( )

由于Queue Manager的CCSID使用819,故增加系统的环境变量:

//MQ管理实例

private MQQueueManager mqQMgr=null;// MQQueueManager instance

private void CreateMng()

向本地队列(SGS.IN.01)放入消息:

 

1private void button1_Click(object sender, System.EventArgs e)
2
3

从本地队列(SGS.IN.01)获取消息

1 private void button2_Click(object sender, System.EventArgs e)
2
3
187
188
189关闭Queue Manager的连接:
190
191 private void button3_Click(object sender, System.EventArgs e)
192
193
207

现介绍这些,以后我会对模板对了和动态队列做一些介绍,希望对大家有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: