我有一个应用程序,它使用 WebSphere MQ 通过 WebSphere 将数据发送到云中的数据中心。部分功能是,如果服务器端订阅者检测到 30 分钟未收到消息,则线程暂停 5 分钟,并移除连接。当它重新启动时,它会重新连接。
在实践中,我发现断开连接并没有删除订阅。尝试重新连接时,我看到此错误:
“创建订阅时可能会出现问题,因为它被另一个消息使用者使用。请确保使用此订阅的所有消息使用者都已关闭,然后再尝试以相同名称创建新订阅。有关更多信息,请参阅链接的异常。”
这表明消息处理程序仍处于连接状态,这意味着断开连接失败。XmsClient 对象(库的一部分,尽管我的一位同事可能已更改它)的断开代码是:
public override void Disconnect()
{
_producer.Close();
_producer.Dispose();
_producer = null;
_consumer.MessageListener = null;
_consumer.Close();
_consumer.Dispose();
_consumer = null;
_sessionRead.Close();
_sessionRead.Dispose();
_sessionRead = null;
_sessionWrite.Close();
_sessionWrite.Dispose();
_sessionWrite = null;
_connection.Stop();
_connection.Close();
_connection.Dispose();
_connection = null;
//GC.Collect();
IsConnected = false;
}
有人对为什么连接仍然存在有任何想法吗?