我要求拆分消息并逐个处理。如果任何消息失败,我想将其报告给错误频道并继续处理下一个可用消息
我正在使用spring cloud aws stream starter with 1.0.0-SNAPSHOT
我使用分割器编写了一个示例程序
@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发送消息时,exxpectation就是这样 应处理'h','e','o',但应将'l'报告为错误。
但是在'l'之后,处理没有恢复。
有没有办法实现这一目标。
答案 0 :(得分:1)
您可以这样做,但使用@ServiceActivator
代替@StreamListener
。第一个选项包含adviceChain
选项,您可以在其中注入ExpressionEvaluatingRequestHandlerAdvice
:https://docs.spring.io/spring-integration/docs/5.0.4.RELEASE/reference/html/messaging-endpoints-chapter.html#expression-advice。
分割器就像Java中的常规循环一样的问题,所以要在错误后继续我们需要以某种方式添加一个尝试...赶上那里。但这已经不是分手的责任了。因此,我们必须将这样的逻辑移到我们遇到错误问题的地方。