메세지 리스너(Message Listeners)
메시지 리스너 컨테이너를 사용할 때 데이터를 수신하려면 리스너를 제공해야 한다. 현재 메시지 리스너에 지원되는 인터페이스는 8개다. 다음 목록은 이러한 인터페이스들을 보여준다.
public interface MessageListener<K, V> { //..................................................................... 1.
void onMessage(ConsumerRecord<K, V> data);
}
public interface AcknowledgingMessageListener<K, V> { //........................................................ 2.
void onMessage(ConsumerRecord<K, V> data, Acknowledgment acknowledgment);
}
public interface ConsumerAwareMessageListener<K, V> extends MessageListener<K, V> { //.......................... 3.
void onMessage(ConsumerRecord<K, V> data, Consumer<?, ?> consumer);
}
public interface AcknowledgingConsumerAwareMessageListener<K, V> extends MessageListener<K, V> { //............. 4.
void onMessage(ConsumerRecord<K, V> data, Acknowledgment acknowledgment, Consumer<?, ?> consumer);
}
public interface BatchMessageListener<K, V> { //................................................................ 5.
void onMessage(List<ConsumerRecord<K, V>> data);
}
public interface BatchAcknowledgingMessageListener<K, V> { //................................................... 6.
void onMessage(List<ConsumerRecord<K, V>> data, Acknowledgment acknowledgment);
}
public interface BatchConsumerAwareMessageListener<K, V> extends BatchMessageListener<K, V> { //................ 7.
void onMessage(List<ConsumerRecord<K, V>> data, Consumer<?, ?> consumer);
}
public interface BatchAcknowledgingConsumerAwareMessageListener<K, V> extends BatchMessageListener<K, V> { //... 8.
void onMessage(List<ConsumerRecord<K, V>> data, Acknowledgment acknowledgment, Consumer<?, ?> consumer);
}
- 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 개별ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. - 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 개별ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. - 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 개별ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근이 제공된다. - 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 개별ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근 방법이 제공된다. - 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 모든ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다.AckMode.RECORD
는 이 인터페이스를 사용할 때 지원되지 않는다. 왜냐하면 리스너에 전체 배치가 제공되기 때문이다. - 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에서 수신된 모든ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. - 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에 수신된 모든ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다.AckMode.RECORD
는 이 인터페이스를 사용할 때 지원되지 않는다. 왜냐하면 리스너에 전체 배치가 제공되기 때문이다. 컨슈머 객체에 대한 접근 방법이 제공된다. - 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의
poll()
작업에서 수신된 모든ConsumerRecord
인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근 방법이 제공된다.
Consumer
객체는 스레드로부터 안전하지 않다. 리스너를 호출하는 스레드에서만 해당 메서드를 호출해야 한다.
컨슈머의 위치나 리스너의 커밋된 오프셋에 영향을 미치는 Consumer<?, ?>
메서드를 실행해서는 안 된다. 컨테이너는 그러한 정보를 관리해야 한다.