2016-09-29 3 views
0

우리는 생산에 까다로운 문제를 발견했습니다.cometd 구독 취소가 작동하지 않는 이유는 무엇입니까?

cometd.unsubscribe(subscription); 

하지만 실제로 탈퇴가 발생하지 않습니다 : 우리가 다음 코드를 실행 우리의 프론트 엔드에 .

nginx, zookepper, 2 jetty 노드 :

우리는 다음과 같은 구성을 가지고있다.

이해하신대로 cometd를 웹 소켓 라이브러리로 사용합니다.

우리가 CHANNEL_1
  • 에서
  • 정지 노드 # 1
  • 구독 취소를 CHANNEL_1 # 1 노드에 가입

    예상을 channel_2 구독 :

    단계 버그를 재현하는 방법 결과 :

    우리는 가입 만

    실제 결과를 chanel_2해야 :

    우리는

    문제를 해결하기 위해 가능한 근본 원인을 이해하는 방법과 단계를 공유하십시오 chanel_1하는 가입 및 chanel_2 있습니다.

    P. 서버 로그에서 채널 수신 거부가 표시되지 않지만 브라우저의 ws 프레임에서 확인합니다.
    P.S. 노드 재 연결 후 _clientId 변경된 것으로 보이며 새로운 _clientId으로 수신 거부 할 수 없습니다. 콜백을 취소해야합니까? 뭐

  • 답변

    0

    ,

    cometd.unsubscribe(channel);

    탈퇴하는 올바른 방법이 아닙니다. 올바른 방법은 다음과 같습니다

    var subscription = cometd.subscribe(channel, function(message) { ... }); 
    ... 
    cometd.unsubscribe(subscription); 
    

    하는 당신은 unsubscribe(...)subscribe(...)에 의해 반환 된 subscription 객체가 아닌 채널을 통과해야합니다.

    이 내용은 CometDdocumentation에 자세하게 설명되어 있습니다.

    +0

    죄송합니다. 내가 질문을 썼을 때 나는 실수했다. 사실 구독 취소 방법에 대한 구독을 전달합니다. 그리고 그것은 정상적인 경우에는 올바르게 작동하지만 노드를 종료 할 때 작동하지 않습니다. – gstackoverflow

    +0

    귀하의 질문에 귀하가하고있는 것과 효과가없는 것을 이해하기에 충분한 세부 정보가 없습니다. 재현 가능한 테스트 케이스와 함께 https://github.com/cometd/cometd/issues에 문제를 제출하실 수 있습니다. – sbordet

    관련 문제