禁止关闭连接时,IBM XMS.Net侦听器会挂断

时间:2018-07-25 14:55:07

标签: ibm-mq xms

嗨,我使用webpshere mq客户端8.0.0.8,我立即设置了侦听器并开始侦听mq,但是出了点问题,myconnection已关闭,但没有引发错误,mylistener挂断了并且无法侦听消息。抛出错误我有一种机制可以捕获并重新启动它,但是那一次我失败了。是否设置了任何属性来避免此问题?

我在connectionproperties中具有exceptionlistener和reconnect选项。但这不是直接起作用,我有一个autoresetevent(receiveCompleteEvent)机制,只有解决方案,我才能在exceptionlistener中找到设置信号,然后终止连接。在异常监听器中,我可以记录连接错误通知,但未设置自动连接,

 connectionfactory.SetIntProperty(IBM.XMS.XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, IBM.XMS.XMSC.WMQ_CLIENT_RECONNECT);
            connectionfactory.SetIntProperty(IBM.XMS.XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, 150);

private void OnException(Exception ex)
        {
            QueueStatuslog.Error(String.Format("Unexpected error occured to connection:{0}", ex.ToString()));
            try
            {
                if (receiveCompleteEvent != null)
                {
                    QueueStatuslog.Error(String.Format("Due to connection error send stop signal:{0}", ex.ToString()));
                    receiveCompleteEvent.Set();
                }

1 个答案:

答案 0 :(得分:2)

当应用程序进行同步MQ API调用(例如Consumer.receive或producer.send)时,将向应用程序抛出异常,如与连接有关的异常。如果使用消息侦听器接收消息,则消息传递是异步操作,并且消息在消息侦听器线程上传递。因此XMS不能在该线程上引发异常。因此,它需要另一个线程,即ExceptionListener,以使应用程序知道任何与连接有关的问题。

您将需要在连接上设置ExceptionListener并捕获引发的任何异常。引发异常时,发出Connection.Stop,清理并重新初始化消息接收。

您还可以查看使用自动客户端reconnectionthis的情况。