Spring Cloud Stream Kafka を使用してトピックから読み取るSpring Boot アプリ ( app0 ) があります。
そのトピックにメッセージを生成する他の 2 つのアプリ ( app1、app2 ) があります。
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) をサポートしながら、この例外が発生しないようにするにはどうすればよいですか。