(net)

王朝学院·作者佚名  2016-05-21
窄屏简体版  字體: 小  |  中  |  大  |  超大  

IBM WebSphere MQ的C#工具类以及源码(net)简单的介绍一下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

动态对了(临时队列)

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

MQ工具类:

using IBM.WMQ;using IBM.WMQ.PCF;using System;using System.Collections.Generic;using System.Linq;using System.Web;//using IBM.WMQAX;/// <summary>/// MQHelp 类库/// henrylee/// </summary>public class MQHelp{ public MQHelp() { } /// <summary> /// 创建本地队列 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="queueName">队列名称</param> /// <param name="isTransmissionQueue">是否为传输队列</param> public void CreateQueue(string qmName, string queueName, bool isTransmissionQueue = false) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); request.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_LOCAL); if (isTransmissionQueue) request.AddParameter(MQC.MQIA_USAGE, MQC.MQUS_TRANSMISSION); PCFMessage[] response = agent.Send(request); } /// <summary> /// 删除队列 /// </summary> public void DelQueue(string qmName, string queueName) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_DELETE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); PCFMessage[] response = agent.Send(request); } /// <summary> /// 读取消息 /// </summary> /// <returns></returns> public string ReadMessage(string qmName, string queueName) { MQQueueManager qMgr = new MQQueueManager(qmName); MQQueue queue = qMgr.accessQueue(queueName, MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING); MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.Options = MQC.MQGMO_WAIT; gmo.WaitInterval = 1000; gmo.MatchOptions = MQC.MQMO_NONE; MQMessage message = new MQMessage(); queue.Get(message); return message.ReadString(message.MessageLength); } /// <summary> /// 写入消息 /// </summary> public void WriteMessage(string qmName, string queueName, string body) { MQQueueManager qMgr = new MQQueueManager(qmName); MQQueue queue = qMgr.AccessQueue(queueName, MQC.MQOO_OUTPUT); MQMessage message = new MQMessage(); message.WriteString(body); message.Format = MQC.MQFMT_STRING; queue.Put(message); } /// <summary> /// 获取当前管理器所有队列 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="isFindSystemQueue">是否包含系统队列</param> /// <returns></returns> public List<string> GetALLQueue(string qmName, bool isFindSystemQueue = false) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_INQUIRE_Q_NAMES); request.AddParameter(MQC.MQCA_Q_NAME, "*"); PCFMessage[] response = agent.Send(request); string[] names = response[0].GetStringListParameterValue(CMQCFC.MQCACF_Q_NAMES); List<string> result = null; if (!isFindSystemQueue) result = names.ToList().Where(s => !s.Contains("AMQ.") && !s.Contains("SYSTEM.")).ToList(); else result = names.ToList(); return result; } /// <summary> /// 创建远程队列 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="queueName">队列名称</param> /// <param name="ycqmName">远程队列管理器名称</param> /// <param name="ycqueueName">远程队列名称</param> /// <param name="csqueueName">传输队列名称</param> public void CreateRemoteQueue(string qmName, string queueName, string ycqmName, string ycqueueName, string csqueueName) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_Q); request.AddParameter(MQC.MQCA_Q_NAME, queueName); request.AddParameter(MQC.MQIA_Q_TYPE, MQC.MQQT_REMOTE); request.AddParameter(MQC.MQCA_REMOTE_Q_MGR_NAME, ycqmName); request.AddParameter(MQC.MQCA_REMOTE_Q_NAME, ycqueueName); request.AddParameter(MQC.MQCA_XMIT_Q_NAME, csqueueName); PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 创建发送方通道 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="channelName">通道名称</param> /// <param name="transmissionQueueName">传输队列名称</param> /// <param name="ipPort">IP地址与端口号 例:localhost(1415) </param> public void CreateChannelBySend(string qmName, string channelName, string transmissionQueueName, string iPPort) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_CHANNEL); request.AddParameter(CMQCFC.MQCACH_CHANNEL_NAME, channelName); request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_SENDER); request.AddParameter(CMQCFC.MQCACH_CONNECTION_NAME, iPPort); request.AddParameter(CMQCFC.MQCACH_XMIT_Q_NAME, transmissionQueueName); PCFMessage[] response = agent.Send(request); agent.Disconnect(); } /// <summary> /// 创建接受方通道 /// </summary> /// <param name="qmName">队列管理器</param> /// <param name="channelName">管道名称</param> public void CreateChannelByReceive(string qmName, string channelName) { PCFMessageAgent agent = new PCFMessageAgent(qmName); PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_CHANNEL); request.AddParameter(CMQCFC.MQCACH_CHANNEL_NAME, channelName); request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_RECEIVER); PCFMessage[] response = agent.Send(request); agent.Disconnect(); }}

以下是前台调用:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{ public const string MQNAME1 = "ManageTest1"; public const string MQNAME2 = "ManageTest2"; public readonly MQHelp MQHELP = new MQHelp(); protected void Page_Load(object sender, EventArgs e) { if (!I

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航