0

Spring Cloud Stream Kafka を使用してトピックから読み取るSpring Boot アプリ ( app0 ) があります。

そのトピックにメッセージを生成する他の 2 つのアプリ ( app1app2 ) があります。

app1は、インターフェイス OrderSource を使用してメッセージを発行します。

public interface OrderSource{ 

    String OUTPUT_PAYMENT = Topic.PAYMENT_RESULTS;

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

例えば:

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

この場合、app0 は app1 からのメッセージを問題なく読み取ります。

app2は KafkaTemplateを使用してメッセージを発行します。

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

この場合、私は から次の例外を観察していますEmbeddedHeadersMessageConverter:

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]

どうやら、メッセージのペイロードからヘッダーを抽出しようとしています。メッセージの両方のソース (KafkaTemplate と OrderSource) をサポートしながら、この例外が発生しないようにするにはどうすればよいですか。

4

1 に答える 1