设为首页 收藏本站
查看: 967|回复: 0

[经验分享] IBM WebSphere MQ的C#工具类以及源码(net)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-3 12:00:08 | 显示全部楼层 |阅读模式
  简单的介绍一下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 (!IsPostBack)
{
List<string> list = new MQHelp().GetALLQueue(MQNAME1);
list.ForEach(s => ddlQueueList.Items.Add(new ListItem(s)));
}
}
protected void Button1_Click(object sender, EventArgs e)
{
Button but = sender as Button;
switch (but.Text)
{
case "添加队列":
MQHELP.CreateQueue(MQNAME1, txtQueue.Text.Trim());
break;
case "删除队列":
MQHELP.DelQueue(MQNAME1, txtQueue.Text.Trim());
break;
case "添加消息":
MQHELP.WriteMessage(MQNAME1, ddlQueueList.SelectedValue, txtMessage.Text.Trim());
break;
case "获取消息":
Literal1.Text = MQHELP.ReadMessage(MQNAME1, ddlQueueList.SelectedValue);
break;
case "添加传输队列":
MQHELP.CreateQueue(txtTMName.Text, txtTName.Text.Trim(), true);
break;
case "删除传输队列":
MQHELP.DelQueue(txtTMName.Text, txtTName.Text.Trim());
break;
case "添加远程队列":
MQHELP.CreateRemoteQueue(txtRMName.Text, txtRQName.Text, txtRMTName.Text, txtRMTQName.Text, txtRTQName.Text);
break;
case "添加发送方通道":
MQHELP.CreateChannelBySend(txtCMName.Text, txtCCName.Text, txtCTName.Text, txtCip.Text);
break;
case "添加接收方通道":
MQHELP.CreateChannelByReceive(txtCMName.Text, txtCCName.Text);
break;
default:
break;
}
}
}
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-122092-1-1.html 上篇帖子: IBM J2EE vs. Microsoft .NET White Paper 下篇帖子: EMC NETAPP IBM 储存产品一说
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表