2017-02-02 2 views
1

스프링 - 카프카를 사용하는 스프링 부트 응용 프로그램이 있습니다. 우리는 config 속성을 업데이트 할 때 kafka 제작자 (kafkatemplate)를 비활성화하려고합니다. 조건부 bean을 시도하고 applicationcontext refresh를 사용했다.런타임 동안 생산자를 정상적으로 종료시키는 스프링 카프카

spring-kafka로 kafkaproducer를 정상적으로 종료 할 수있는 방법이 있습니까?

답변

0

DefaultKafkaProducerFactory에서 destroy()으로 전화를 걸면 (싱글 톤) 제작자가 닫히지 만 다음 번에 createProducer()을 호출하면 다른 사람이 만들어집니다. 현재이를 예방할 방법이 없습니다. 팩토리를 서브 클래스 화하고 생성자를 생성하지 않으려면 예외를 throw해야합니다.

+0

안녕하세요 게리 - 그건 우리가 필요로하는 것입니다. destroy()가 호출되었고 나중에 메시지가 전송되었을 때 (createProducer 호출 시도) - 다음 오류가 발생합니다. java.lang.IllegalStateException : 제작자가 닫힌 후에 보낼 수 없습니다. \t at org.apache.kafka.clients.producer.internals.RecordAccumulator.append (RecordAccumulator.java:172) ~ [kafka-clients-0.10.1.1.jar : na] \t at org.apache.kafka.clients. producer.KafkaProducer.doSend (KafkaProducer.java:474) ~ [kafka-clients-0.10.1.1.jar : na] \t at org.apache.kafka.clients.producer.KafkaProducer.send (KafkaProducer.java:436) ~ [kafka-clients-0.10.1.1.jar : na] – basu76

+0

여기에 의견을 남기려하지 마십시오. 그것은 잘 렌더링되지 않습니다; 귀하의 질문을 편집하고 귀하가 그렇게했다고 말하기 위해 의견을 추가하는 것이 좋습니다. 전체 스택 추적을 표시해야하지만 'KafkaTemplate'캐시가 제작자를 볼 수 있습니다. 그건 틀렸어요; 매번 공장에서 생산자를 가져와야합니다. [문제] (https://github.com/spring-projects/spring-kafka/issues/232)를 열었습니다. 해결 방법으로 새로운 'KafkaTemplate'을 만들어 공장에서 새로운 제작자를 가져와야합니다. –

관련 문제