为什么Cometd取消订阅并不起作用?

时间:2016-09-29 20:06:06

标签: javascript java cluster-computing failover cometd

我们在生产中发现了棘手的问题。 在我们的前端,我们执行以下代码:

cometd.unsubscribe(subscription);

但实际上这个取消订阅并没有发生。

我们有以下配置:

nginxzookepper,2个jetty个节点。

如您所知,我们使用cometd作为Web套接字库。

重现错误的步骤:

  1. 我们订阅节点#1到channel_1
  2. 停止节点#1
  3. 取消订阅channel_1
  4. 订阅channel_2
  5. 预期结果:

    我们只订阅了chanel_2

    实际结果:

    我们只订阅了chanel_1和chanel_2

    请分享可能的方法来了解根本原因和解决问题的步骤。

    P.S。在服务器日志中,我没有看到取消订阅频道,但我在浏览器的ws框架中看到它   P.S。在节点重新连接后看起来_clientId更改,我们无法取消订阅新_clientId。我们应该取消订阅任何回调吗?

1 个答案:

答案 0 :(得分:1)

你在做什么,

#{component.clientId}

不是取消订阅的正确方法。 正确的方法是:

cometd.unsubscribe(channel);

您必须传递var subscription = cometd.subscribe(channel, function(message) { ... }); ... cometd.unsubscribe(subscription); unsubscribe(...)返回的subscription对象,而不是频道。

CometD documentation中详细说明了这一点。