2017-11-08 4 views
0

자동 커밋을 false로 설정하고 ConcurrentMessageListenerContainer을 사용하여 주제에서 메시지를 소비하고 데이터베이스에 씁니다. 데이터베이스가 다운 된 경우 컨테이너가 설문 조사에서 현재 레코드를 처리하지 못하도록하고 다음에 수행하지 마십시오. poll(). DataSourceHealthIndicator을 구현했으며 데이터베이스 상태를 UP으로 확인한 후 나머지 레코드를 처리하기 위해 컨테이너를 다시 시작하려고합니다.예외에서 스프링 카프카 중지 컨테이너

제안 사항 나머지 레코드 처리를 중단하고 컨테이너를 중지하려면 어떻게해야합니까? consumer.close()을 사용해 보았습니다. 그러나 그것은 프로세스를 멈추지 않고 계속 던지는 소비자는 이미 닫혀 있습니다.

답변

0

container.stop()으로 전화하십시오. @KafkaListener을 사용하는 경우 리스너 컨테이너 레지스트리에서 stop()으로 전화하면 등록 된 모든 컨테이너가 중지됩니다.

+0

AcknowledgingConsumerAwareMessageListener에는 컨테이너를 사용할 수 없습니다. 소비자 만 사용할 수 있습니다. – Mayur

+0

Listener 메서드를 통해가 아니라 true로 설정하지만, autowire 또는 다른 방식으로 삽입 할 수 있습니다. 리스너 스레드에서 stop()을 호출하지 않아야합니다. 왜냐하면 종료 지연이 발생할 것이기 때문입니다. –

+0

당신이 제안한 것과 거의 같은'ContainerStoppingErrorHandler'를 사용했습니다. – Mayur

관련 문제