SpringCloud 入站反序列化
类似的规则适用于入站数据反序列化。
如果禁用本机解码(这是默认设置),则框架将使用用户设置的contentType转换消息(否则,将应用默认的application/json
)。在这种情况下,它将针对入站反序列化而忽略入站上设置的任何SerDe。
这是在入站上设置contentType的属性。
spring.cloud.stream.bindings.input.contentType: application/json
这是启用本机解码的属性。
spring.cloud.stream.bindings.input.nativeDecoding: true
如果在输入绑定上启用了本机解码(用户必须如上所述明确启用它),则框架将跳过对入站进行的任何消息转换。在这种情况下,它将切换到用户设置的SerDe。将使用在实际输出绑定上设置的valueSerde
属性。这是一个例子。
spring.cloud.stream.kafka.streams.bindings.input.consumer.valueSerde: org.apache.kafka.common.serialization.Serdes$StringSerde
如果未设置此属性,它将使用默认的SerDe:spring.cloud.stream.kafka.streams.binder.configuration.default.value.serde
。
值得一提的是,Kafka Streams绑定程序不会反序列化入站的密钥-它仅依赖于Kafka本身。因此,您必须在绑定上指定keySerde
属性,否则它将默认为应用程序范围的公用keySerde
。
绑定级别密钥serde:
spring.cloud.stream.kafka.streams.bindings.input.consumer.keySerde
公用密钥序列:
spring.cloud.stream.kafka.streams.binder.configuration.default.key.serde
与在出站上进行KStream分支的情况一样,为每个绑定设置值SerDe的好处是,如果您有多个输入绑定(多个KStreams对象),并且它们都需要单独的值SerDe,则可以分别配置它们。如果使用通用配置方法,则此功能将不适用。
更多建议: