IBM MQ XMS认购不打烊(IBM MQ XMS subscription not closin

2019-09-22 16:23发布

我有一个使用的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;
        }

任何人有任何的想法,为什么连接是否仍然存在?

Answer 1:

从错误的描述,它看起来像服务器的用户是创建一个持久订阅。 持久订阅继续即使接收邮件订阅应用程序没有运行的时候。 要删除持久订阅,你必须调用Session.Unsubscribe()。 简单地断开消费者不会删除订阅。

如果你的目的是关闭用户无需拆卸订阅,然后发出Connection.Stop()第一,然后注销消息监听器,然后关闭消费。 调用connection.Stop方法停止消息传送。



文章来源: IBM MQ XMS subscription not closing
标签: c# ibm-mq