IBM.XMS - 设置Session.Close超时

时间:2016-12-13 13:16:30

标签: .net ibm-mq xms

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

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

伪代码

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);

0 个答案:

没有答案