0

TL;DR 我正在使用 IBM.XMS,当我ISession.Close在网络故障期间调用时,该方法永远不会返回 - 即使网络已重新建立。

我正在使用 IBM.XMS从 WMQ读取(即获取)消息。在测试期间,我们通过删除客户端和主机之间的网络连接来强制断开与 WMQ 的连接。发生这种情况时,任何 PUT 消息的尝试都会引发异常,从而强制 a Closeon ISession

伪代码

ISession session;
IDestination destination;
IConsumer consumer;

try 
{
    session = GetSession(connection);
    destination = GetDestination(session);
    consumer = GetConsumer(destination);

    while (hasMessage) 
    {
        // process message 
    }
}
catch
{
    session.Close(); // waits forever
}

这将永远锁定我的处理线程,而不是在一段时间后超时和/或抛出异常(假设没有网络)。

我也设置了重新连接IConnection

connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_OPTIONS, XMSC.WMQ_CLIENT_RECONNECT_Q_MGR);
connectionFactory.SetStringProperty(XMSC.WMQ_CONNECTION_NAME_LIST, $"{hostName}({port})");
connectionFactory.SetIntProperty(XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT, XMSC.WMQ_CLIENT_RECONNECT_TIMEOUT_DEFAULT);
4

0 回答 0