|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0! |
“墓碑”记录的空有效载荷与日志压缩
使用日志压缩时,你可以发送和接收消息零用于识别密钥删除的有效载荷。
你也可以收到零其他原因的值,例如反串化器也许会回来零当它无法反序列化某个值时。
发送一个零通过使用卡夫卡模板你可以将空值输入发送()方法。
一个例外是发送(消息<?>消息)变体。
因为春季消息 留言<?>不可能有零有效载荷,你可以使用一种特殊的载荷类型,称为卡夫卡无,框架映射为零.
为了方便,静电声KafkaNull.INSTANCE提供。
当你使用消息监听器容器时,接收到消费者记录有零 value().
要配置@KafkaListener处理零有效载荷,你必须使用@Payload注释必要 = 错误.
如果是压缩日志的墓碑消息,通常还需要密钥,以便应用程序判断哪个密钥是”删除".
以下示例展示了这样的构型:
@KafkaListener(id = "deletableListener", topics = "myTopic")
public void listen(@Payload(required = false) String value, @Header(KafkaHeaders.RECEIVED_KEY) String key) {
// value == null represents key deletion
}
当你使用职业级别时@KafkaListener多重@KafkaHandler方法,需要一些额外的配置。
具体来说,你需要一个@KafkaHandler方法卡夫卡无有效载荷。
以下示例展示了如何配置一个:
@KafkaListener(id = "multi", topics = "myTopic")
static class MultiListenerBean {
@KafkaHandler
public void listen(String cat) {
...
}
@KafkaHandler
public void listen(Integer hat) {
...
}
@KafkaHandler
public void delete(@Payload(required = false) KafkaNull nul, @Header(KafkaHeaders.RECEIVED_KEY) int key) {
...
}
}
注意,该参数为零不卡夫卡无.
| 参见手动分配所有分区。 |
此功能需要使用KafkaNullAwarePayloadArgumentResolver框架在使用默认时会进行配置MessageHandlerMethodFactory.
使用自定义时MessageHandlerMethodFactory看添加自定义HandlerMethodArgumentResolver自@KafkaListener. |