C# 连接 IBM MQ

安装 IBM WebSphere MQ:IBM Products

 正确安装要注意几个地方,集群,通道发送方和通道接收方。

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

    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
    评论
要在C#中操作IBM MQ,需要使用IBM MQ .NET API。以下是一些基本步骤: 1. 安装IBM MQ .NET API:您可以从IBM官网下载IBM MQ .NET API并安装。 2. 引用IBM MQ .NET API:在您的C#项目中,需要添加对IBM MQ .NET API的引用。 3. 连接到队列管理器:使用MQQueueManager类连接到队列管理器。例如,您可以使用以下代码连接到队列管理器: ``` string queueManagerName = "QMGR01"; string channelName = "SVRCONN"; string connectionName = "localhost(1414)"; string userId = "myuser"; string password = "mypassword"; Hashtable properties = new Hashtable(); properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); MQEnvironment.UserId = userId; MQEnvironment.Password = password; MQEnvironment.Channel = channelName; MQEnvironment.Hostname = connectionName.Split('(')[0]; MQEnvironment.Port = int.Parse(connectionName.Split(')')[0].Split('(')[1]); MQQueueManager queueManager = new MQQueueManager(queueManagerName, properties); ``` 4. 打开队列:使用MQQueue类打开队列。例如,您可以使用以下代码打开队列: ``` string queueName = "QUEUE01"; MQQueue queue = queueManager.AccessQueue(queueName, MQC.MQOO_INPUT_SHARED | MQC.MQOO_FAIL_IF_QUIESCING); ``` 5. 接收消息:使用MQMessage类接收消息。例如,您可以使用以下代码接收消息: ``` MQMessage message = new MQMessage(); MQGetMessageOptions getMessageOptions = new MQGetMessageOptions(); getMessageOptions.Options |= MQC.MQGMO_WAIT; getMessageOptions.WaitInterval = 5000; queue.Get(message, getMessageOptions); string messageText = message.ReadString(message.MessageLength); ``` 6. 关闭队列和队列管理器:使用MQQueue类和MQQueueManager类关闭队列和队列管理器。例如,您可以使用以下代码关闭队列和队列管理器: ``` queue.Close(); queueManager.Disconnect(); ``` 以上是一个基本的C#操作IBM MQ的示例。根据您的具体需求,您可能需要添加其他代码来处理异常情况、发送消息等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值