メッセージを分割して 1 つずつ処理する必要があります。いずれかのメッセージが失敗した場合は、エラー チャネルに報告し、次の利用可能なメッセージの処理を再開したいと思います
1.0.0-SNAPSHOT で春のクラウド aws ストリーム スターターを使用しています
スプリッターを使ったサンプルプログラムを書いてみました
@Bean
public MessageChannel channelSplitOne() {
return new DirectChannel();
}
@StreamListener(INTERNAL_CHANNEL)
public void channelOne(String message) {
if (message.equals("l")) {
throw new RuntimeException("Error due to l");
}
System.out.println("Internal: " + message);
}
@Splitter(inputChannel = Sink.INPUT, outputChannel = INTERNAL_CHANNEL)
public List<Message> extractItems(Message<String> input) {
return Arrays.stream(input.getPayload().split(""))
.map(s -> MessageBuilder.withPayload(s).copyHeaders(input.getHeaders()).build())
.collect(Collectors.toList());
}
メッセージを Hello として送信すると、'h'、'e'、'o' は処理されると予想されますが、'l' はエラーとして報告されます。
しかし、ここでは 'l' の後、処理は再開されません。
これを達成する方法はありますか。