OBL*_*OBL 2 .net windows-services ibm-mq
我编写了一个MQ应用程序,它是exe,但它只针对单个实例运行并终止自身.所需的功能是使其连续运行并继续处理数据,一旦数据耗尽,它应该继续监听新数据.
请问有人可以告诉我需要做些什么?
谢谢!
目前,您的应用程序可能会循环遍历消息,直到它返回返回代码,指示队列为空.为了继续监听新数据,您需要做两件事:
Receive().您必须将此与下一个建议相结合.Receive()使用超时执行此操作时.例如,consumer.Receive(20000)在超时之前将等待20秒以显示下一条消息.如果你没有包含超时,那么应用程序将在QMgr上抛出大量未满足的GET请求,这些请求似乎是一个失控的应用程序和/或失控的QMgr,你会看到具有高CPU利用率的进程.
你可以在Receive()两次通话之间睡觉,但这不是很有效.使用Receive(TIMEOUT)块,而仅提供任何消息线程.一旦消息到达,将消息传递给线程就没有延迟.如果您手动休眠线程,它必须轮询队列,并且只会按设定的sleep()间隔进行.
另一种方法是您可以设置回调方法,以便线程不会阻塞.例如,如果您有回调方法OnNewMessageCallback,则可以使用创建异步消息侦听器MessageListener messageListener = new MessageListener(OnNewMessageCallback);
这两种方法都在样品中描述.如果您安装了SDK和示例,这些将在C:\Program Files (x86)\IBM\WebSphere MQ\tools\dotnet\samples或等效,这取决于您安装WMQ的位置.
如果您想知道如何区分"队列中没有消息"和一些更严重的错误,请检查MQException.ReasonCode.如果是2033,那么Receive()超时.这和所有其他原因代码在这里定义.
一旦你有一个成功循环并等待新消息的程序,你可以选择将其作为服务运行,如Simon的响应中所述,或者像现在一样以交互方式运行.
如果您正在开发WMQ v6,请注意v6是截至2012年9月的服务终止,并且.Net集成在WMQ的v7.0或v7.1中要好得多.您可以从SupportPac MQC7下载带有.Net类的最新WMQ v7.0客户端.相应的信息中心就在这里.发布时,v7.1客户端将是SupportPac,但确切名称尚不清楚.我会尽量记住在链接可用时更新它.截至今天,v7.1客户端可通过Passport Advantage使用您的IBM客户帐户获得.v7.1信息中心在这里.
| 归档时间: |
|
| 查看次数: |
747 次 |
| 最近记录: |