首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IBM MQ XMS订阅未关闭

IBM MQ XMS订阅未关闭
EN

Stack Overflow用户
提问于 2012-09-20 16:08:24
回答 1查看 757关注 0票数 2

我有一个应用程序,它使用WebSphere MQ通过WebSphere将数据发送到云中的数据中心。部分功能是,如果服务器端订阅者检测到消息在30分钟内没有收到,线程将暂停5分钟,连接将被移除。当它重新启动时,它会重新连接。

在实践中,我发现断开连接并没有删除订阅。尝试重新连接时,我看到以下错误:

“创建订阅时可能出现问题,因为它正被另一个消息使用者使用。在尝试使用相同名称创建新订阅之前,请确保使用此订阅的任何消息使用者都已关闭。有关详细信息,请参阅链接的异常。”

这表明消息处理程序仍处于连接状态,这意味着断开连接失败。断开XmsClient对象(库的一部分,尽管我的一个同事可能已经更改了它)的代码是:

代码语言:javascript
复制
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;
        }

有没有人知道为什么这种联系仍然存在?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-20 16:48:06

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

如果您的意图是在不删除订阅的情况下关闭订阅者,则首先执行Connection.Stop(),然后执行取消注册消息侦听器,然后关闭消费者。调用connection.Stop方法会停止消息传递。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12508473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档