消息监听器
当你使用消息监听器容器时,必须提供一个监听器来接收数据。目前有八个受支持的消息监听器接口。以下清单展示了这些接口:
public interface MessageListener<K, V> { 1
void onMessage(ConsumerRecord<K, V> data);
}
public interface AcknowledgingMessageListener<K, V> extends MessageListener<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);
}
当使用自动提交或容器托管的提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的单个ConsumerRecord实例。当使用手动提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的单个ConsumerRecord实例。当使用自动提交或容器托管的提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的单个ConsumerRecord实例。提供了对Consumer对象的访问。当使用手动提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的单个ConsumerRecord实例。提供了对Consumer对象的访问。当使用自动提交或容器托管的提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的所有ConsumerRecord实例。使用此接口时不支持AckMode.RECORD,因为监听器得到的是完整的批次。当使用手动提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的所有ConsumerRecord实例。当使用自动提交或容器托管的提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的所有ConsumerRecord实例。使用此接口时不支持AckMode.RECORD,因为监听器得到的是完整的批次。提供了对Consumer对象的访问。当使用手动提交方法之一时,使用此接口来处理从 Kafka consumer
poll()操作接收到的所有ConsumerRecord实例。提供了对Consumer对象的访问。
Consumer 对象不是线程安全的。你只能在调用监听器的线程上调用它的方法。
你不应该在监听器中执行任何会影响 consumer 位置或已提交偏移量的 Consumer<?, ?> 方法;这些信息需要由容器来管理。