2017-09-25 2 views

답변

2

"카프카 리스너에게 주제를 동적으로 전달할 수 없습니다"; 대신 프로그램 방식으로 리스너 컨테이너를 만들어야합니다.

+0

감사합니다. 같은 의견이있었습니다. 그러나 코드 스 니펫을 게시하는 방법은 매우 유용합니다. –

+0

새로운'KafkaMessageListenerContainer' (또는'ConcurrentMessageListenerContainer')와'start()'만 작성하면됩니다. –

+0

어디에서 시작 하시겠습니까? 내 소비자는 이제 @KafkaListener가있는 POJO 리스너입니다. ConsumerConfig 파일에 소비자 구성을 기록합니다. 같은 파일에는 containerFactory와 컨테이너가 있지만, KafkaListener 주석은 컨테이너를 매개 변수로 받아들이지 않습니다. 이 컨테이너 객체는 어디서 사용합니까? –

0

실시간으로 주제를 동적으로 변경할 수 있습니다. !!!!

@Component 
public class StoppingErrorHandler implements ErrorHandler { 

    @Autowired 
    private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry; 

    @Override 
    public void handle(Exception thrownException, ConsumerRecord<?, ?> record) { 
     ConcurrentMessageListenerContainer listenerContainer = (ConcurrentMessageListenerContainer)kafkaListenerEndpointRegistry.getListenerContainer("fence"); 
     ContainerProperties cp=listenerContainer.getContainerProperties(); 
     String[] topics =cp.getTopics(); 
     topics[0]="gaonb"; 
     listenerContainer.stop(); 
     listenerContainer.start(); 
    } 
} 
관련 문제