.Net环境下操作IBM WebShpere MQ
2011-12-01 09:53
309 查看
IBM WebShpere MQ 简单介绍:
具体的详细信息大家可以在IBM的网站和网上有许多的学习资料。
IBM MQ是实现了消息队列的一个中间件,它可以运行在现在所有流行的平台上。在我们的项目中主要使用的是AS400和UNIX平台上。
在IBM MQ中主要分为以下几个对象:
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
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,故增加系统的环境变量:
环境准备:
1、 安装IBM WebSphere MQ Client for Windows。(MQ客户端)
2、 安装WebSphere MQ classes for Microsoft .NET.msi。(.Net插件)
3、 在你的.Net项目中引用 amqmdnet.dll,该dll在.Net插件安装目录中可以找到。
开始编写代码:
链接MQManager 及远程队列写入信息:
public class ZYTaskMQDAC
{
private MQQueueManager mqQMgr = null;
private MQQueue mqueue = null;
public ZYTaskMQDAC()
{
CreateCon();
CreateQueue();
}
/// <summary>
/// 创建队列管理器
/// </summary>
public void CreateCon()
{
if (this.mqQMgr == null)
{
try
{
string hostname = ConfigurationManager.AppSettings["HostName"]; //服务器的IP
string channel =ConfigurationManager.AppSettings["Channel"] ; //服务器通道
string qManager = ConfigurationManager.AppSettings["MQManaager"]; //队列管理器名称
string userName =ConfigurationManager.AppSettings["UserName"] ; //用户名
string pword =ConfigurationManager.AppSettings["Password"] ; //用户密
int mQPort=Convert.ToInt32(ConfigurationManager.AppSettings["MQPort"]); //MQ端口
//初始化环境变量
MQEnvironment.Hostname = hostname;
MQEnvironment.Channel = channel;
MQEnvironment.Port = mQPort;
MQEnvironment.UserId = userName;
MQEnvironment.Password = pword;
ad9a
//构造队列管理器
this.mqQMgr = new MQQueueManager(qManager);
}
catch (MQException ex)
{
//日子记录创建列管理器 失败
ExceptionService.Current.Handle(ex);
this.mqQMgr = null;
}
}
}
/// <summary>
/// 创建队列
/// </summary>
private void CreateQueue()
{
string sendQueue=ConfigurationManager.AppSettings["SendQueue"]; //发送队列名称
try
{
if (this.mqQMgr == null)
return;
//通过MQ管理创建队列实例
int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INQUIRE;
mqueue = this.mqQMgr.AccessQueue(sendQueue, openOptions);
}
catch (MQException ex)
{
//日志记录 链接队列管理失败!
ExceptionService.Current.Handle(ex);
}
}
/// <summary>
/// 写入队列信息
/// </summary>
/// <param name="_strMsg"></param>
public void PutMsgToMQ(string _strMsg)
{
MQMessage mqmsg = null;
try
{
//创建消息操作实例
MQPutMessageOptions pmo = new MQPutMessageOptions();
//创建消息实例
mqmsg = new MQMessage();
mqmsg.CharacterSet = 1208; //设置消息编码为UTF-8
mqmsg.WriteString(_strMsg);
mqmsg.Format = MQC.MQFMT_STRING; //制定消息格式为String
//发送消息
mqueue.Put(mqmsg, pmo);
}
catch (MQException ex)
{
//日志记录 发送消息失败
ExceptionService.Current.Handle(ex);
}
}
/// <summary>
/// 关闭队列 释放连接
/// </summary>
public void CloseMQ()
{
if(mqueue!=null)
mqueue.Close();
if(mqQMgr!=null)
{
mqQMgr.Disconnect();
mqQMgr = null;
}
}
}
具体的详细信息大家可以在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,故增加系统的环境变量:
环境准备:
1、 安装IBM WebSphere MQ Client for Windows。(MQ客户端)
2、 安装WebSphere MQ classes for Microsoft .NET.msi。(.Net插件)
3、 在你的.Net项目中引用 amqmdnet.dll,该dll在.Net插件安装目录中可以找到。
开始编写代码:
链接MQManager 及远程队列写入信息:
public class ZYTaskMQDAC
{
private MQQueueManager mqQMgr = null;
private MQQueue mqueue = null;
public ZYTaskMQDAC()
{
CreateCon();
CreateQueue();
}
/// <summary>
/// 创建队列管理器
/// </summary>
public void CreateCon()
{
if (this.mqQMgr == null)
{
try
{
string hostname = ConfigurationManager.AppSettings["HostName"]; //服务器的IP
string channel =ConfigurationManager.AppSettings["Channel"] ; //服务器通道
string qManager = ConfigurationManager.AppSettings["MQManaager"]; //队列管理器名称
string userName =ConfigurationManager.AppSettings["UserName"] ; //用户名
string pword =ConfigurationManager.AppSettings["Password"] ; //用户密
int mQPort=Convert.ToInt32(ConfigurationManager.AppSettings["MQPort"]); //MQ端口
//初始化环境变量
MQEnvironment.Hostname = hostname;
MQEnvironment.Channel = channel;
MQEnvironment.Port = mQPort;
MQEnvironment.UserId = userName;
MQEnvironment.Password = pword;
ad9a
//构造队列管理器
this.mqQMgr = new MQQueueManager(qManager);
}
catch (MQException ex)
{
//日子记录创建列管理器 失败
ExceptionService.Current.Handle(ex);
this.mqQMgr = null;
}
}
}
/// <summary>
/// 创建队列
/// </summary>
private void CreateQueue()
{
string sendQueue=ConfigurationManager.AppSettings["SendQueue"]; //发送队列名称
try
{
if (this.mqQMgr == null)
return;
//通过MQ管理创建队列实例
int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING | MQC.MQOO_INQUIRE;
mqueue = this.mqQMgr.AccessQueue(sendQueue, openOptions);
}
catch (MQException ex)
{
//日志记录 链接队列管理失败!
ExceptionService.Current.Handle(ex);
}
}
/// <summary>
/// 写入队列信息
/// </summary>
/// <param name="_strMsg"></param>
public void PutMsgToMQ(string _strMsg)
{
MQMessage mqmsg = null;
try
{
//创建消息操作实例
MQPutMessageOptions pmo = new MQPutMessageOptions();
//创建消息实例
mqmsg = new MQMessage();
mqmsg.CharacterSet = 1208; //设置消息编码为UTF-8
mqmsg.WriteString(_strMsg);
mqmsg.Format = MQC.MQFMT_STRING; //制定消息格式为String
//发送消息
mqueue.Put(mqmsg, pmo);
}
catch (MQException ex)
{
//日志记录 发送消息失败
ExceptionService.Current.Handle(ex);
}
}
/// <summary>
/// 关闭队列 释放连接
/// </summary>
public void CloseMQ()
{
if(mqueue!=null)
mqueue.Close();
if(mqQMgr!=null)
{
mqQMgr.Disconnect();
mqQMgr = null;
}
}
}
相关文章推荐
- .Net环境下操作IBM WebShpere MQ
- .Net环境下操作IBM WebShpere MQ
- .Net环境下操作IBM WebShpere MQ
- .Net环境下操作IBM WebShpere MQ-转
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- 复杂域环境下通过.Net操作Active Directory经验点滴
- .Net环境下COM互操作
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- IBM_MQ基本操作
- IBM WMQ7.0环境备份及导入操作
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- CentOS7下单机部署RabbltMQ环境的操作记录
- Flex与.NET互操作(七):了解FluorineFx的环境配置
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- .net 环境下操作oracle数据库
- java与.net比较学习系列开发环境和常用调试技巧常用操作快捷键
- Flex与.NET互操作 了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- .NET环境下,通过LINQ操作SQLite数据库