该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用 Spring for Apache Kafka 4.0.0spring-doc.cadn.net.cn

“墓碑”记录的空有效载荷与日志压缩

使用日志压缩时,你可以发送和接收消息用于识别密钥删除的有效载荷。spring-doc.cadn.net.cn

你也可以收到其他原因的值,例如反串化器也许会回来当它无法反序列化某个值时。spring-doc.cadn.net.cn

发送一个通过使用卡夫卡模板你可以将空值输入发送()方法。 一个例外是发送(消息<?>消息)变体。 因为春季消息 留言<?>不可能有有效载荷,你可以使用一种特殊的载荷类型,称为卡夫卡无,框架映射为. 为了方便,静电声KafkaNull.INSTANCE提供。spring-doc.cadn.net.cn

当你使用消息监听器容器时,接收到消费者记录 value().spring-doc.cadn.net.cn

要配置@KafkaListener处理有效载荷,你必须使用@Payload注释必要 = 错误. 如果是压缩日志的墓碑消息,通常还需要密钥,以便应用程序判断哪个密钥是”删除". 以下示例展示了这样的构型:spring-doc.cadn.net.cn

@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方法卡夫卡无有效载荷。 以下示例展示了如何配置一个:spring-doc.cadn.net.cn

@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) {
        ...
    }

}

注意,该参数为卡夫卡无.spring-doc.cadn.net.cn

此功能需要使用KafkaNullAwarePayloadArgumentResolver框架在使用默认时会进行配置MessageHandlerMethodFactory. 使用自定义时MessageHandlerMethodFactory添加自定义HandlerMethodArgumentResolver@KafkaListener.