kafka和Spring Cloud Stream 混用致使stream 發送消息出現序列化失敗問題: java.lang.ClassCastException:

因爲項目中kafka配置中key和value 的序列化方式爲java

key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer

服務啓動時,會給cloud-stream 裝載綁定中間件的配置,而spring cloud stream默認使用的序列化方式爲ByteArraySerializer,這就致使stream 在發送數據時使用l了服務裝載StringSerializer序列化方式,從而致使了java.lang.ClassCastException: [B > cannot be cast to java.lang.String的問題出現。spring

解決方案:apache

在yaml 文件中自定義binder環境的屬性。當配置完成後它,建立binder的上下文再也不是應用程序上下文的子節點。這容許binder組件和應用組件的徹底分離。bootstrap

stream:
  bindings:
    input:
      destination: input
      binder: kafka
    output:
      destination: input
      binder: kafka
  binders:
    kafka:
      type: kafka
      environment:
        spring.kafka:
          bootstrap-servers: ${spring.kafka.bootstrap-servers}

stream 就會使用本身默認的環境。至此問題解決spa

 

 

相關文章
相關標籤/搜索