Java 이상 - Dubbo RemotingException: message can not send, because channel is closed

1672 단어 이상

문제 설명

  • Dubbo 애플리케이션 시작 성공
  • Dubbo Admin에서 서비스 상태가 정상(제공자와 소비자가 있음)을 볼 수 있다.
  • Zookeeper가 있는 서버는 핑통Dubbo가 있는 서버를 사용할 수 있다.

  • 이런 상황에서 소비자가 서비스를 요청할 때 계속 알림message can not send, because channel is closed.

    문제 분석(참조용)


    메시지 can not send, because channel is closed, 파이프가 닫혀서 메시지를 보낼 수 없음을 의미합니다.왜 메시지를 보내야 하는지는 소비자 A가 공급자 B를 요청할 때 등록센터에서 공급자 B를 찾았기 때문이다. 이때 공급자 B가 서비스를 실행해야 하는지, 어떤 서비스를 실행해야 하는지, 파라미터가 무엇인지, 바로 등록센터가 보내야 하는 메시지를 알려야 한다.

    문제 해결


    포트가 열리지 않았기 때문에 이 문제가 발생했습니다.우리는 모든 Dubbo 응용 프로그램이 시스템 포트를 차지한다는 것을 알고 있습니다. 기본값은 20880입니다.Dubbo 앱이 늘어나면 개방된 포트도 늘어나야 한다.이것도 자주 소홀히 되는 점이다.다음 방법으로 확인할 수 있습니다.vim /etc/sysconfig/iptables를 통해 다음과 같은 포트 설정을 볼 수 있습니다.
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 20880:20890 -j ACCEPT
    

    이러한 구성은 22 포트 및 20880 ~ 20890 (포함) 포트가 켜져 있음을 나타냅니다.만약 추가가 필요하다면, 추가된 후에 아래의 두 가지 명령을 실행해야 한다
    /etc/init.d/iptables restart
    /etc/init.d/iptables save
    

    iptables에 대한 자세한 내용은 블로그 《Linux - iptables》를 참조하십시오.

    기타 상황


    한 네티즌은 다음과 같은 상황도 메시지 can not send를 초래할 수 있다고 말했다. 왜냐하면 채널 is closed.실천 분석을 통해 다음과 같은 상황은 결코 이 문제의 출현을 초래하지 않을 것이다.
  • 서버가 정상적으로 작동하지 않으면 서버가 정상적으로 작동하지 않거나 소비자가 어떤 인터페이스에 대한 호출을 사용하지 않으면 Failed to invoke the method xxx in the service com.xxx.xxx.XxxService. No provider available for the service ...
  • dubbo는 대외적으로 인터페이스가 정상적이지 않거나 인터페이스 자체에 이상이 발생하거나 Dubbo 응용이 시작되지 않아 이 문제를 일으키지 않는다고 발표했다.
  • 네트워크가 통하지 않으면 네트워크가 통하지 않아 등록 센터에 등록하는 데 성공하지 못할 것이다.

  • (끝)

    좋은 웹페이지 즐겨찾기