IBM MQ XMS订阅未关闭

时间:2012-09-20 08:08:24

标签: c# ibm-mq

我有一个应用程序,它使用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;
        }

任何人都有任何想法为什么连接仍然存在?

1 个答案:

答案 0 :(得分:3)

从错误描述看,服务器订阅者正在创建持久订阅。即使订阅应用程序未运行,持久订阅仍会继续接收消息。要删除持久订阅,您必须调用Session.Unsubscribe()。简单地关闭消费者不会删除订阅。

如果您打算在不删除订阅的情况下关闭订阅者,请先发出Connection.Stop(),然后取消注册消息侦听器,然后关闭使用者。调用connection.Stop方法会停止邮件传递。