내 응용 프로그램은 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);
}
에서 찾을 수 있습니다).
안녕하세요. 도와 줘서 고마워. 계획은 모든 연결을 처리 할만큼 충분히 크다. 더욱이 (그것은 나쁘다, 나는 충분히 명확하지 않았다) 소비자는 모두 처음에 일하지만 때때로이 특정 대기열의 소비자는 소비를 멈춘다. 앱을 다시 시작하면 모든 것이 정상적으로 작동하고 소비자가 다시 작업하기 시작합니다. 나는 그것을 재현 할 수 없다. 내 응용 프로그램은 하나의 큰 머신 (PL Web 1)에서 실행됩니다. 나는 heroku infra (재시작 등)의 특성에 익숙하고 응용 프로그램에서이를 처리 할 수 있습니다. – alkis
이 문제는 하트 비트 구성과 결합 된 과부하로 인해 발생할 수 있다고 생각했습니다.나는이 일이 다시 일어나기를 기다리고 있는데이 특정 소비자 연결이 토끼에 의해 떨어졌는지는 알지만, 소비자는 모르는 채로 남아있다. (이는 오류 로그가 없다는 것을 설명 할 것이다.) 이 경우 하트 비트를 더 큰 값으로 변경하면 문제가 해결 될 수 있습니다. 그러나 이것이 가능한지 나는 모른다. 내 업데이트를 확인하십시오. – alkis
아, 진단하기가 다소 까다 롭습니다. 특히 쉽게 재현 할 수없는 경우 :(하지만 그 소비자는 연결이 끊어지면 연결을 다시 시작해야합니다.) 귀하의 하트 비트 설정이 저에게 잘 어울립니다 . – rdegges