2016-08-04 2 views
2

내 응용 프로그램은 RabbitMQ에서 일부 메시지를 소비하고 처리합니다. 약 10 개의 대기열이 있으며 각 대기열에는 최대 10 명의 소비자 (스레드)가 있습니다. 프리 페치가 5입니다. CloudAMQP 플러그인 (RabbitMQ 서비스)을 사용하여 Heroku에서 설정을 실행하고 있습니다.RabbitMQ Java 클라이언트가 메시지 사용을 중지합니다.

기본 하트 비트 및 연결 시간 제한 설정 (60 초)으로 실행 중입니다.

내 Java 응용 프로그램은 spring-rabbit 라이브러리를 사용하는 스프링 부팅 응용 프로그램입니다.

버전 :

RabbitMQ 3.5.3 
Erlang 17.5.3 
Java 1.8 
Spring boot 1.3.2.RELEASE 
Spring rabbit 1.5.3.RELEASE 

문제는 그 시간 이후 하나 개의 특정 큐 정류장이 소요되는 메시지의 소비자. 내 Java 응용 프로그램을 다시 시작하면 모든 것이 잘 동작합니다. 다른 대기열은 정상적으로 소비되고 있습니다. 응용 프로그램 측면에는 오류가 없습니다. 토끼의 측면의 로그 스트림에 나는 로컬 또는 Heroku가있는 테스트 환경에서 재현 할 수없는

= REPORT==== 2016-08-02 15:53:32 UTC === 
closing AMQP connection <SOMETHING> (SOMETHING_ELSE -> SOMETHING_ELSE_ELSE): 
{heartbeat_timeout,running} 

같은 일부 항목을 참조하십시오.

업데이트

아래의 코드는 내가 서버에서 받고있는 무슨이다 (60초 위의 하트 비트의 값을 늘릴 수 없습니다 AMQConnection.class

int heartbeat = negotiatedMaxValue(this.requestedHeartbeat, 
            connTune.getHeartbeat()); 


private static int negotiatedMaxValue(int clientValue, int serverValue) { 
     return (clientValue == 0 || serverValue == 0) ? 
      Math.max(clientValue, serverValue) : 
      Math.min(clientValue, serverValue); 
} 

에서 찾을 수 있습니다).

답변

2

불행히도, 이것은 네트워킹 문제로 보입니다. 다음과 같은 몇 가지 원인이있을 수 있습니다.

  • CloudAMQP 서비스에 문제가있어 다른 사용자가 정상적으로 작동하지 않기 때문에 연결이 끊어 질 수 있습니다.
  • CloudAMQP 계획에서 원하는만큼 동시 연결을 허용하지 않습니다. 모든 소비자를 지원할만큼 충분한 충분한 계획을 세우고 있는지 확인 했습니까? https://elements.heroku.com/addons/cloudamqp
  • 해당 소비자의 Heroku dyno가 다시 시작되고 연결이 끊어집니다. Heroku dynos 주기적으로 다시 시작합니다. dynos가 정상적으로 다시 시작할 수없는 경우 이유를 조사하는 것이 좋습니다.
  • Heroku dynos 중 하나에 네트워크 문제가 있습니다 (이 경우 사용자 개입없이 자체적으로 다시 시작될 수 있음).

모든 dynos를 강제로 다시 시작하도록하는 한 가지 방법은 $ heroku ps:restart입니다. 이렇게하면 Heroku가 dynos를 다시 시작하게되며, 이는 종종 새로운 EC2 호스트로 이동하게됩니다. 이것이 문제가되는 경우 도움이 될 수 있습니다.

+0

안녕하세요. 도와 줘서 고마워. 계획은 모든 연결을 처리 할만큼 충분히 크다. 더욱이 (그것은 나쁘다, 나는 충분히 명확하지 않았다) 소비자는 모두 처음에 일하지만 때때로이 특정 대기열의 소비자는 소비를 멈춘다. 앱을 다시 시작하면 모든 것이 정상적으로 작동하고 소비자가 다시 작업하기 시작합니다. 나는 그것을 재현 할 수 없다. 내 응용 프로그램은 하나의 큰 머신 (PL Web 1)에서 실행됩니다. 나는 heroku infra (재시작 등)의 특성에 익숙하고 응용 프로그램에서이를 처리 할 수 ​​있습니다. – alkis

+0

이 문제는 하트 비트 구성과 결합 된 과부하로 인해 발생할 수 있다고 생각했습니다.나는이 일이 다시 일어나기를 기다리고 있는데이 특정 소비자 연결이 토끼에 의해 떨어졌는지는 알지만, 소비자는 모르는 채로 남아있다. (이는 오류 로그가 없다는 것을 설명 할 것이다.) 이 경우 하트 비트를 더 큰 값으로 변경하면 문제가 해결 될 수 있습니다. 그러나 이것이 가능한지 나는 모른다. 내 업데이트를 확인하십시오. – alkis

+0

아, 진단하기가 다소 까다 롭습니다. 특히 쉽게 재현 할 수없는 경우 :(하지만 그 소비자는 연결이 끊어지면 연결을 다시 시작해야합니다.) 귀하의 하트 비트 설정이 저에게 잘 어울립니다 . – rdegges

관련 문제