2017-03-09 2 views
0

봄 부팅, 봄 구름 스트림 스키마 레지스트리, kafka 바인더를 사용하여 avro 메시지 제작자, kafka 및 avro의 영사와 함께 작업 예제를 작성하려고합니다. 메시지를 소비하려고 할 때 오류가 발생합니다.봄 부팅 및 봄 클라우드 스트림을 사용하여 카프카 제작자에서 avro 콘텐츠 유형을 설정하는 방법

ERROR 7059 --- [afka-listener-1] oscsbkKafkaMessageChannelBinder : contentType [application/x-java-model]을 사용하여 [io.igx.android.Sensor]를 비 직렬화 할 수 없습니다. 객체; TYPE = io.igx.android.Sensor] java.lang.NullPointerException이

I가 spring.cloud.stream.bindings.output.contentType = 애플리케이션/+ 브로 소비자 측 spring.cloud에 .stream.bindings.output.contentType = application/ + avro 제작자 측.

소비자가 application/x-java-object 대신 avro 콘텐츠 유형을보고 사용하지 않는 이유는 무엇입니까?

답변

0

제작자 측에서 콘텐츠 유형 application/*+avro이 필요하다고 생각합니다. (* 접두어에 유의하십시오). 제작자를 위해 설정되면 소비자 용 입력 contentType을 지정해야하는지 확인할 수 있습니까? 나는 소비자가 제작자가 설정 한 컨텐트 유형에 따라 그것을 추론 할 수 있다고 생각한다.

+0

저는 제작자 측에서는 spring.cloud.stream.bindings.output.contentType = application/* + avro, 소비자 측에서는 spring.cloud.stream.bindings.input.contentType = application/* + avro가 있습니다. 여전히 동일한 오류 : com.esotericsoftware.kryo.KryoException : java.lang.NullPointerException –

+0

... avro 스키마에 배열이없는 경우 정상적으로 메시지를 사용할 수 있습니다. –

+0

콘텐츠 유형을 "spring.cloud.stream.bindings.output.contentType = avro/bytes"로 설정하면 어떻게됩니까? –

0

채널 이름이 잘못되었습니다. 그래서 문제는 응용 프로그램/* + 브로 대신

spring.cloud.stream.bindings의

. {MY 채널 이름} = spring.cloud.stream.bindings.input.contentType을 사용 하였다 .contentType = application/* + avro.

{MY CHANNEL NAME}을 (를) 마술을 사용했던 이름으로 변경했습니다.

소비자 측에서 콘텐츠 유형을 지정하지 않은 경우에도 작동합니다.

또한 spring.cloud.stream.schemaRegistryClient.endpoint 을 지정해야합니다. 내 경우에는 제작자와 소비자 측면에서와 같이 기본값이 아닌 경우입니다.