0

에서 문자열 색인이 범위를 벗어 나는 봄 부팅 응용 프로그램이 (APP0).봄 클라우드 스트림 카프카 - EmbeddedHeadersMessageConverter - java.lang.StringIndexOutOfBoundsException : 주제에서 읽을 봄 클라우드 스트림 카프카를 사용

은 해당 항목에 메시지를 생성이 다른 애플 리케이션 (APP1, APP2)이 있습니다.

예컨대
public interface OrderSource{ 

    String OUTPUT_PAYMENT = Topic.PAYMENT_RESULTS; 

    @Output(OrderSource.OUTPUT_PAYMENT) 
    MessageChannel output(); 

:

APP1가 인터페이스 OrderSource를 사용하여 메시지 게시 이때

orderSource.output().send(MessageBuilder.withPayload(order).build(), 500); 

을 APP0 아무 문제없이 APP1에서 메시지를 판독한다. 내가 EmbeddedHeadersMessageConverter에서 다음과 같은 예외를 관찰하고이 경우

ListenableFuture<SendResult<Integer, String>> delivery = kafkaTemplate.send(Topic.PAYMENT_RESULTS, "{ ... }"); 
try { 
    SendResult<Integer, String> result = delivery.get(timeout, TimeUnit.MILLISECONDS); 

:

java.lang.StringIndexOutOfBoundsException: String index out of range: 152 
    at java.lang.String.checkBounds(Unknown Source) ~[na:1.8.0_91] 
    at java.lang.String.<init>(Unknown Source) ~[na:1.8.0_91] 
    at org.springframework.cloud.stream.binder.EmbeddedHeadersMessageConverter.oldExtractHeaders(EmbeddedHeadersMessageConverter.java:135) ~[spring-cloud-stream-1.1.0.RELEASE.jar:1.1.0.RELEASE] 
    at org.springframework.cloud.stream.binder.EmbeddedHeadersMessageConverter.extractHeaders(EmbeddedHeadersMessageConverter.java:105) ~[spring-cloud-stream-1.1.0.RELEASE.jar:1.1.0.RELEASE] 

을 분명히 그것의 페이로드에서 헤더를 추출하기 위해 노력하고있다

APP2는 KafkaTemplate를 사용하여 메시지를 게시 메시지. 두 메시지 소스 (KafkaTemplate 및 OrderSource)를 지원하는 동안이 예외가 발생하지 않게하려면 어떻게해야합니까?

답변

1

비 Spring-Cloud-Stream 앱과 통신하려면 소비자의 headerModeraw으로 구성해야합니다.

app1에 대해서도 동일한 작업을 수행해야하므로 헤더를 포함하지 않습니다.

consumer propertiesproducer properties을 참조하십시오.

+0

감사합니다. Gary. 몇 가지 질문 : 헤더를 삽입하지 않는 것의 연속성은 무엇입니까? 그들은 여전히 ​​보내질 것인가? – codependent

+0

카프카에는 헤더 개념이 없습니다. 그래서 우리는 그것을 페이로드에 삽입해야합니다. 전송 된 유일한 헤더 (기본값)는 내용 유형입니다. 소비하는 응용 프로그램에서 복잡한 메시지 변환을 수행하기 위해 바인더를 사용하는 경우에만 필요합니다. 필요한 경우, 또는 사용자 정의 헤더를 임베드하도록 송신 (app1) 바인더를 구성한 경우 운이 없습니다. 그러나 전송하기 전에 app2에 내장 된 변환기를 사용하는 것이 좋습니다. 또는 app1/app2에 대해 서로 다른 주제를 사용하고 이에 따라 app0을 구성하십시오. –

+0

이제 모든 것이 명확 해졌습니다. 감사합니다! '당신의 app2에서 임베디드 컨버터를 사용하기 전에 해결할 것입니다 .' – codependent

관련 문제