锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C#开源 / IBM Websphere MQ、IBM Websphere MQ的C#简单用法
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容。

IBM Websphere MQ、IBM Websphere MQ的C#简单用法


最近开发平台,需要进程间通信,在查资料时,发现了IBM Websphere MQ,网站平台是经常使用消息队列的场合,IBM Websphere MQ里的Web突出了此MQ的历史悠久和可靠性。IBM从硬件转向服务行业,在软件平台上没有建树,肯定不能面对市场要求,IBM Websphere MQ是IBM的重要产品之一,进程间协作通信是企业级平台必备的关键工具软件,也是IBM立足服务业的基石。

IBM Websphere MQ能够在Linux下使用,环境安装方便。

下面介绍IBM Websphere MQ的C#简单用法:

 

介绍
在 IBM Websphere MQ 应用程序中,通常我们需要处理合适的消息以立即到达队列。在这种情况下,轮询方法不是一个好的解决方案;等待消息或事件驱动是更好的解决方案。

IBM Websphere MQ 为到达队列的进程消息提供触发。实际上,MQ 的 Triggering 是很挑剔的。您必须创建初始队列、进程等。重要的是,您必须运行“runmqtrm”命令来监控您想要的队列上的 MQ 触发。

我针对这种情况提出了一个简单的解决方案。如果您知道消息何时到达队列,为什么不等待消息。

 

背景
在可以使用 WebSphere MQ 对象的属性、方法或事件之前,必须创建对该对象的引用。添加 WebSphere MQ 引用的技术是添加 amqmdnet.dll 作为引用。此动态链接库 (DLL) 通常位于:C:\Program Files\IBM\WebSphere MQ\bin\amqmdnet.dll 并使用 IBM.WMQ;

 

使用代码
MQMessageListener 类提供Listen 方法来等待到达队列管理器qmName 和队列queueName 的合适消息。

在 MQMessageListener 类中,MQQueueManager 设置打开选项是 MQOO_INPUT_AS_Q_DEF 和 MQOO_FAIL_IF_QUIESCING, 用于连接到 Websphere MQ 以使用 queue-define 获取消息,如果该队列处于静默模式则失败。然后 MQGetMessageOptions 设置为 MQGMO_FAIL_IF_QUIESCING 和 MQGMO_WAIT 用于 MQGMO_WAIT。当您将 WaitInterval 设置为 MQWI_UNLIMITED 时,此选项与 WaitInterval 方法一起使用,应用程序将在 queue.Get(message, gmo) 处等待消息到达队列。当消息到达队列时,应用程序将运行以返回消息。

public class MQMessageListener
    {
        public static MQMessage Listen(string qmName, string queueName)
        {
            /** MQOO_INPUT_AS_Q_DEF -- open queue to get message 
	    *  using queue-define default.
             *  MQOO_FAIL_IF_QUIESCING -- access fail if queue manager is quiescing. **/
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING;
            MQQueueManager mqManager = new MQQueueManager(qmName);
            MQQueue queue = mqManager.AccessQueue(queueName,openOptions);

            /** MQGMO_FAIL_IF_QUIESCING -- 
	    *  get message fail if queue manager is quiescing.
             *  MQGMO_WAIT -- waits for suitable message to arrive.
             *  MQWI_UNLIMITED -- unlimited wait interval. **/
            MQGetMessageOptions gmo = new MQGetMessageOptions();
            gmo.Options = MQC.MQGMO_FAIL_IF_QUIESCING | MQC.MQGMO_WAIT;
            gmo.WaitInterval = MQC.MQWI_UNLIMITED;
            MQMessage message = new MQMessage();
            //wait for message
            queue.Get(message, gmo);
            queue.Close();

            //release resource.
            mqManager = null;
            queue = null;
            gmo = null;
            System.GC.Collect();

            return message;
        }
    }

class Program
{
static void Main(string[] args)
{
Console.WriteLine("==START==");
String message = null;
do{
Console.WriteLine("Waiting...");
MQMessage mqMessage = MQMessageListener.Listen
("MANAGER.QUEUE", "LOCAL.QUEUE");
message = mqMessage.ReadString(mqMessage.MessageLength);
Console.WriteLine("\tMessage: " + message);
}while(message != "BYE");
Console.WriteLine("==END==");
}
}

注:socket编程里也有选项,也有listen,其实通信的过程上来看是类似的,但是环境不一样,环境有可能会导致复杂问题。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内劳动服务器公司办公楼一层