codecamp

SpringCloud 出站序列化

如果禁用本机编码(这是默认设置),则框架将使用用户设置的contentType转换消息(否则,将应用默认的application/json)。在这种情况下,对于出站序列化,它将忽略出站上设置的任何SerDe。

这是在出站上设置contentType的属性。

spring.cloud.stream.bindings.output.contentType: application/json

这是启用本机编码的属性。

spring.cloud.stream.bindings.output.nativeEncoding: true

如果在输出绑定上启用了本机编码(用户必须如上所述明确地启用本机编码),则框架将在出站上跳过任何形式的自动消息转换。在这种情况下,它将切换到用户设置的Serde。将使用在实际输出绑定上设置的valueSerde属性。这是一个例子。

spring.cloud.stream.kafka.streams.bindings.output.producer.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.output.producer.keySerde

公用密钥序列:

spring.cloud.stream.kafka.streams.binder.configuration.default.key.serde

如果使用分支,则需要使用多个输出绑定。例如,

interface KStreamProcessorWithBranches {

    		@Input("input")
    		KStream<?, ?> input();

    		@Output("output1")
    		KStream<?, ?> output1();

    		@Output("output2")
    		KStream<?, ?> output2();

    		@Output("output3")
    		KStream<?, ?> output3();
    	}

如果设置了nativeEncoding,则可以如下对各个输出绑定设置不同的SerDe。

spring.cloud.stream.kafka.streams.bindings.output1.producer.valueSerde=IntegerSerde
spring.cloud.stream.kafka.streams.bindings.output2.producer.valueSerde=StringSerde
spring.cloud.stream.kafka.streams.bindings.output3.producer.valueSerde=JsonSerde

然后,如果您具有SendTo这样的@SendTo({“ output1”,“ output2”,“ output3”}),则分支中的KStream[]将应用上面定义的正确的SerDe对象。如果未启用nativeEncoding,则可以如下在输出绑定上设置不同的contentType值。在这种情况下,框架将使用适当的消息转换器在将消息发送到Kafka之前转换消息。

spring.cloud.stream.bindings.output1.contentType: application/json
spring.cloud.stream.bindings.output2.contentType: application/java-serialzied-object
spring.cloud.stream.bindings.output3.contentType: application/octet-stream
SpringCloud 多个输出绑定(又名分支)
SpringCloud 入站反序列化
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

三、Spring Cloud Netflix

SpringCloud Hystrix超时和Ribbon客户

SpringCloud 重试失败的请求

五、Spring Cloud Stream

六、SpringCloud Binder实现

SpringCloud 重试RabbitMQ Binder

SpringCloud Dead-Letter队列处理

八、Spring Cloud Sleuth

SpringCloud 当前Span

十二、Spring Cloud for Cloud Foundry

十三、Spring Cloud Contract

Spring Cloud Contract验证程序设置

SrpingCloud Gradle项目

十五、Spring Cloud网关

Spring Cloud 配置路由谓词工厂和网关过滤工厂

Spring Cloud TLS / SSL

Spring Cloud网关配置

SpringCloud 故障排除

十八、Spring Cloud GCP

Spring Cloud GCP Spring资源

Spring Cloud Spring JDBC

Spring Cloud Redis的Cloud Memorystore

Spring Cloud 云身份识别代理(IAP)身份验证

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }