Spring连载使用Spring访问 Apache Kafka(十五)—-消息头

【Spring连载】使用Spring访问 Apache Kafka(十五)----消息头Message Headers

Apache Kafka client中提供了对消息中headers的支持。Spring for Apache Kafka现在支持将这些headers映射到spring-messaging MessageHeaders和从MessageHeaders中映射这些headers。

以前的版本将ConsumerRecord和ProducerRecord映射到spring-messaging Message<?>,其中value属性被映射到payload,其他属性(topic, partition等)被映射到headers。当前版本这种情况仍然存在,但现在可以映射其他(任意)headers。

Apache Kafka headers 有一个简单的API,如下接口定义所示:

public interface Header {

    String key();

    byte[] value();

}

KafkaHeaderMapper策略用于在Kafka Headers和MessageHeaders之间映射header条目。其接口定义如下:

public interface KafkaHeaderMapper {

    void fromHeaders(MessageHeaders headers, Headers target);

    void toHeaders(Headers source, Map<String, Object> target);

}

SimpleKafkaHeaderMapper将原始headers映射为byte[],并提供用于转换为String值的配置选项。
DefaultKafkaHeaderMapper将键(key)映射到MessageHeaders header名称,并且为了支持出站(outbound)消息的丰富header类型,执行JSON转换。一个“特殊”头(key为spring_json_header_types)包含一个:的json映射。此header用于入站(inbound)端,以提供每个header值到原始类型的适当转换。
在入站(inbound)端,所有Kafka Header实例都映射到MessageHeaders。在出站端,默认情况下,除了id、时间戳和映射到ConsumerRecord属性的头之外,所有MessageHeader都被映射。

通过向映射器提供模式,可以指定要为出站消息映射哪些标头。以下列表显示了一些映射示例: