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