消息监听器

当您使用消息监听器容器时,您必须提供一个监听器来接收数据。目前支持八个消息监听器接口。以下列表显示了这些接口

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 当使用自动提交或容器管理的提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的单个 `ConsumerRecord` 实例。
2 当使用手动提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的单个 `ConsumerRecord` 实例。
3 当使用自动提交或容器管理的提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的单个 `ConsumerRecord` 实例。提供对 `Consumer` 对象的访问。
4 当使用手动提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的单个 `ConsumerRecord` 实例。提供对 `Consumer` 对象的访问。
5 当使用自动提交或容器管理的提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的所有 `ConsumerRecord` 实例。当您使用此接口时,不支持 `AckMode.RECORD`,因为监听器获得了完整的批处理。
6 当使用手动提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的所有 `ConsumerRecord` 实例。
7 当使用自动提交或容器管理的提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的所有 `ConsumerRecord` 实例。当您使用此接口时,不支持 `AckMode.RECORD`,因为监听器获得了完整的批处理。提供对 `Consumer` 对象的访问。
8 当使用手动提交方法时,使用此接口处理从 Kafka 消费者 `poll()` 操作接收到的所有 `ConsumerRecord` 实例。提供对 `Consumer` 对象的访问。
`Consumer` 对象不是线程安全的。您必须只在调用监听器的线程上调用其方法。
您不应该在监听器中执行任何影响消费者位置或已提交偏移量的 `Consumer<?, ?>` 方法;容器需要管理此类信息。