.Net环境下操作IBM WebShpere MQ
.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(
ALTDATE(
QMID(SGS.MGR_
MAXHANDS(256) MAXUMSGS(10000)
AUTHOREV(DISABLED) INHIBTEV(DISABLED)
LOCALEV(DISABLED) REMOTEEV(DISABLED)
PERFMEV(DISABLED) STRSTPEV(ENABLED)
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(
ALTTIME(
SENDEXIT( )
RCVEXIT( )
SENDDATA( )
RCVDATA( )
由于Queue Manager的CCSID使用819,故增加系统的环境变量:
环境准备:
1、 安装IBM WebSphere MQ Client for Windows。(MQ客户端)
2、 安装WebSphere MQ classes for Microsoft .NET.msi。(.Net插件)
3、 在你的.Net项目中引用 amqmdnet.dll,该dll在.Net插件安装目录中可以找到。
开始编写代码:
连接Queue Manager















































































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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

现介绍这些,以后我会对模板对了和动态队列做一些介绍,希望对大家有所帮助。