简单的介绍一下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 = ;
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[].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;
}
}
}

IBM WebSphere MQ的C#工具类以及源码(net)的更多相关文章

  1. Java并发工具类CountDownLatch源码中的例子

    Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...

  2. IBM WebSphere MQ介绍安装以及配置服务详解

    首先介绍一下MQ MQ消息队列的简称是一种应用程序对应用程序的通信方法.说白了也就是通过队列的方式来对应用程序进行数据通信.而无需专用链接来链接它们. MQ的通讯方式 1.数据报的方式 Datagra ...

  3. IBM WebSphere MQ介绍安装以及配置服务详解(转)

    首先介绍一下MQ MQ消息队列的简称是一种应用程序对应用程序的通信方法.说白了也就是通过队列的方式来对应用程序进行数据通信.而无需专用链接来链接它们. MQ的通讯方式 1.数据报的方式 Datagra ...

  4. IBM WebSphere MQ 7.5基本用法

    一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...

  5. IBM WebSphere MQ 通道类型配置

    IBM WebSphere MQ 通道类型配置 初学MQ,四种常见通道,windows下操作 目录 Sender--Receiver Server-Receiver Server-Requester ...

  6. IBM websphere MQ使用说明

    百度文库: IBM websphere MQ使用说明 IBM MQ安装和配置

  7. IBM websphere MQ 消息发送与获取

    一. 所需依赖包,安装 IBM websphere MQ 后,在安装目录下的 java 目录内 import java.io.IOException; import java.util.Propert ...

  8. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  9. 25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment

    25 BasicUsageEnvironment0基本使用环境基类——Live555源码阅读(三)UsageEnvironment 25 BasicUsageEnvironment0基本使用环境基类— ...

随机推荐

  1. Android Studio虚拟机配置虚拟键盘

    1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...

  2. mysql配置的讲解 mysql的root密码重置 mysql的登录

    一,MySQL配置的讲解 port  默认mysql端口 socket  用于服务器端和客户端通信的套连接文字 skip-locking 取消文件系统的外部锁 key_buffer_size  索引缓 ...

  3. 4. Linux 系统目录

    一.Linux 系统目录的作用 /home            用户主目录的根节点,所有用户自己独有的文件一般放在这个目录下的用户目录下 /bin                二进制可执行命令 / ...

  4. Charles的使用教程

    Charles是mac os和windows下的另外一个抓包软件(均收费,可破解),功能与fiddler类似,优点是可以自定义上下行网速.External Proxy.反向代理配置简单.可解析AMF协 ...

  5. android第三方分享之友盟社会化组件

    前言 现在几乎所有的app都带有分享功能,第一为了更好地推广自己的产品,第二作为使用者也能及时的把自己觉得好的文章,话题,app分享到社交平台供大家一起学习和使用.开发中虽然android系统自带分享 ...

  6. jq操作cookie

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. MapXtreme在asp.net中的使用之加载地图(转)

    MapXtreme在asp.net中的使用之加载地图(转) Posted on 2010-05-04 19:44 Happy Coding 阅读(669) 评论(0) 编辑 收藏 1.地图保存在本地的 ...

  8. linux下C++对线程的封装

    之前一直是使用C语言,前段时间转做C++.无论使用什么语言,多线程编程都是不可或缺的.最近项目中又用到了线程,现在将线程的封装做出总结: 1.线程类中应该包含线程ID.线程的状态以及线程基本操作等. ...

  9. Java之定时任务详解

    在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现.下面就其原理.实例以及Timer缺陷三个方面来解析java Timer定时器. 在 ...

  10. 【转】mysql行列转换方法总结

    转:http://blog.chinaunix.net/uid-7692530-id-2567582.html 在某些数据库中有交叉表,但在MySQL中却没有这个功能,但网上看到有不少朋友想找出一个解 ...