嗨,我使用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();
}
答案 0 :(得分:2)
当应用程序进行同步MQ API调用(例如Consumer.receive或producer.send)时,将向应用程序抛出异常,如与连接有关的异常。如果使用消息侦听器接收消息,则消息传递是异步操作,并且消息在消息侦听器线程上传递。因此XMS不能在该线程上引发异常。因此,它需要另一个线程,即ExceptionListener,以使应用程序知道任何与连接有关的问题。
您将需要在连接上设置ExceptionListener并捕获引发的任何异常。引发异常时,发出Connection.Stop,清理并重新初始化消息接收。
您还可以查看使用自动客户端reconnection和this的情况。