Message Listeners

当你使用 message listener container 时,你必须提供一个侦听器来接收数据。当前有八个受支持的邮件侦听器接口。如下清单所示这些接口:

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 在使用自动提交或某一个容器管理的 commit methods 时,使用此接口处理从 Kafka 消费者 poll() 操作接收的各个 ConsumerRecord 实例。
2 使用此接口处理在使用某一个手动 commit methods 时从 Kafka 消费者 poll() 操作接收的各个 ConsumerRecord 实例。
3 在使用自动提交或某一个容器管理的 commit methods 时,使用此接口处理从 Kafka 消费者 poll() 操作接收的各个 ConsumerRecord 实例。访问 Consumer 对象。
4 使用此接口处理在使用某一个手动 commit methods 时从 Kafka 消费者 poll() 操作接收的各个 ConsumerRecord 实例。访问 Consumer 对象。
5 在使用自动提交或某一个容器管理的 commit methods 时,使用此接口处理从 Kafka 消费者 poll() 操作接收的所有 ConsumerRecord 实例。由于侦听器提供完整批处理,因此在使用此接口时不受支持 AckMode.RECORD
6 在使用某一个手动 commit methods 时,使用此接口处理从 Kafka 消费者 poll() 操作接收的所有 ConsumerRecord 实例。
7 在使用自动提交或某一个容器管理的 commit methods 时,使用此接口处理从 Kafka 消费者 poll() 操作接收的所有 ConsumerRecord 实例。由于侦听器提供完整批处理,因此在使用此接口时不受支持 AckMode.RECORD。访问 Consumer 对象。
8 使用此接口处理在使用某一个手动 commit methods 时从 Kafka 消费者 poll() 操作接收的所有 ConsumerRecord 实例。访问 Consumer 对象。

Consumer 对象不是线程安全的。您必须仅在其调用侦听器的线程中调用其方法。

您不应在侦听器中执行任何影响消费者位置或已提交偏移量的 Consumer<?, ?> 方法;该容器需要管理此类信息。