Splitter在异常期间中止而不处理后续消息

时间:2018-05-08 06:51:27

标签: spring-integration spring-cloud-stream spring-integration-aws

我要求拆分消息并逐个处理。如果任何消息失败,我想将其报告给错误频道并继续处理下一个可用消息

我正在使用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'之后,处理没有恢复。

有没有办法实现这一目标。

1 个答案:

答案 0 :(得分:1)

您可以这样做,但使用@ServiceActivator代替@StreamListener。第一个选项包含adviceChain选项,您可以在其中注入ExpressionEvaluatingRequestHandlerAdvicehttps://docs.spring.io/spring-integration/docs/5.0.4.RELEASE/reference/html/messaging-endpoints-chapter.html#expression-advice

分割器就像Java中的常规循环一样的问题,所以要在错误后继续我们需要以某种方式添加一个尝试...赶上那里。但这已经不是分手的责任了。因此,我们必须将这样的逻辑移到我们遇到错误问题的地方。