메세지 리스너(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);
}
  1. 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 개별 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다.
  2. 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 개별 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다.
  3. 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 개별 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근이 제공된다.
  4. 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 개별 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근 방법이 제공된다.
  5. 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 모든 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다. AckMode.RECORD는 이 인터페이스를 사용할 때 지원되지 않는다. 왜냐하면 리스너에 전체 배치가 제공되기 때문이다.
  6. 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에서 수신된 모든 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다.
  7. 자동 커밋 또는 컨테이너 관리 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에 수신된 모든 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다. AckMode.RECORD는 이 인터페이스를 사용할 때 지원되지 않는다. 왜냐하면 리스너에 전체 배치가 제공되기 때문이다. 컨슈머 객체에 대한 접근 방법이 제공된다.
  8. 수동 커밋 메서드 중 하나를 사용할 때 카프카 컨슈머의 poll() 작업에서 수신된 모든 ConsumerRecord 인스턴스를 처리하려면 이 인터페이스를 사용한다. 컨슈머 객체에 대한 접근 방법이 제공된다.

Consumer 객체는 스레드로부터 안전하지 않다. 리스너를 호출하는 스레드에서만 해당 메서드를 호출해야 한다.

컨슈머의 위치나 리스너의 커밋된 오프셋에 영향을 미치는 Consumer<?, ?> 메서드를 실행해서는 안 된다. 컨테이너는 그러한 정보를 관리해야 한다.