Websphere MQ的研究C#

 正确安装是前提,很是烦人啊,这东西,要注意几个地方,集群,通道发送方和通道接收方。

要想正确发送消息,必须具备以下条件:

1、传输队列。(本地队列,用法选传输)

2、消息通道(注意填写链接名称是对方IP,传输队列都填上)

3、远程队列(注意填写远程队列和远程队列管理器名称)

然后往远程队列里面填写数据,就会发送到远程的队列了!!

用C#连接IBMMQ需要引用以下几个DLL,该DLL在IBMMQ安装目录bin文件夹下!amqmdnet.dll,imqc23vn.dll,

mqic32.dll,amqmdnet.dll

 

代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using IBM.WMQ.PCF;
using IBM.WMQ;

namespace test{
    internal class IBMMQClass
    {
        public void CreateQueueManage(string qmName)
        {
            throw new Exception("不会创建!");
        }

        /// <summary>
        /// 创建本地队列
        /// </summary>
        /// <param name="qmName">队列管理器名称</param>
        /// <param name="queueName">本地队列名称</param>
        public void CreateQueue(string qmName, string queueName)
        {
            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);
            PCFMessage[] response = agent.Send(request);
            agent.Disconnect();
        }

        /// <summary>
        /// 创建远程队列
        /// </summary>
        /// <param name="qmName">队列管理器</param>
        /// <param name="queueName">队列名称</param>
        /// <param name="ycqmName">远程队列管理器名称</param>
        /// <param name="ycqueueName">远程队列名称</param>
        /// <param name="csqueueName">传输队列名称</param>
        public void CreateYuanchengQueue(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="isSend">True为发送方,false为接收方</param>
        public void CreateChannel(bool isSend)
        {
            PCFMessageAgent agent = new PCFMessageAgent("QM_zhang");
            PCFMessage request = new PCFMessage(CMQCFC.MQCMD_CREATE_CHANNEL);
            request.AddParameter(CMQCFC.MQCACH_CHANNEL_NAME, "mama");
            if (!isSend)
            {
                request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_RECEIVER);
            }
            else
            {
                request.AddParameter(CMQCFC.MQIACH_CHANNEL_TYPE, MQC.MQCHT_SENDER);
                request.AddParameter(CMQCFC.MQCACH_CONNECTION_NAME, "192.168.3.232");
                request.AddParameter(CMQCFC.MQCACH_XMIT_Q_NAME, "bb");
            }
            PCFMessage[] response = agent.Send(request);
            agent.Disconnect();
        }

        /// <summary>
        /// 删除队列
        /// </summary>
        /// <param name="qmName">队列管理器名称</param>
        /// <param name="queueName">队列名称</param>
        public void DeleteQueue(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);
            agent.Disconnect();
        }

        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="qmName">队列管理器</param>
        /// <param name="queueName">队列名称</param>
        /// <param name="body">消息内容</param>
        public void PutMessage(string qmName, string queueName, string body)
        {
            MQQueueManager qMgr = new MQQueueManager(qmName);
            MQQueue queue = qMgr.AccessQueue(queueName, MQC.MQOO_OUTPUT);
            try
            {
                MQMessage message = new MQMessage();
                message.WriteString(body);
                message.Format = MQC.MQFMT_STRING;
                queue.Put(message);
            }
            catch { }
            finally
            {
                queue.Close();
            }
        }


        /// <summary>
        /// 获取消息
        /// </summary>
        /// <param name="qmName">队列管理器名称</param>
        /// <param name="queueName">队列名称</param>
        /// <returns>消息内容</returns>
        public string GetMessage(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);
            try
            {
                MQMessage message = new MQMessage();
                queue.Get(message);
                return message.ReadString(message.MessageLength);
            }
            catch
            { }
            finally
            {
                queue.Close();
            }
        }

        /// <summary>
        /// 获取消息
        /// </summary>
        /// <param name="qmName">队列管理器名称</param>
        /// <param name="queueName">队列名称</param>
        /// <param name="timeInterval">等待时间(毫秒)</param>
        /// <param name="qMgr">队列管理器实体类</param>
        /// <returns>消息内容</returns>
        public string GetMessage(string qmName, string queueName, int timeInterval, out MQQueueManager qMgr)
        {
            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 = timeInterval;
            gmo.MatchOptions = MQC.MQMO_NONE;
            MQMessage message = new MQMessage();
            queue.Get(message, gmo);
            return message.ReadString(message.MessageLength);
        }


    }
}

有几个遗留问题,怎么创建队列管理器?如何用代码创建集群?都还在继续研究中。。。。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值