2

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

我的连接属性中有异常侦听器和重新连接选项。但这不是直接起作用,我有一个自动重置事件(receiveCompleteEvent)机制,唯一的解决方案是我可以在异常侦听器中找到设置信号,并终止连接。在异常侦听器中,我可以记录连接错误通知,但是没有自动连接设置,

 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();
                }
4

1 回答 1

2

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

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

您还可以查看使用自动客户端重新连接this

于 2018-07-26T05:33:28.593 回答