如何解决Spring Cloud Stream中的 "IllegalArgumentException.Canot set a condition for methods that return a value"?无法为返回值的方法设置条件"?

问题描述 投票:0回答:1

我有一个处理死信队列的Spring Cloud Stream应用程序。

在这里,我处理了转发到DLQ主题的记录,如下所示--。

@SpringBootApplication
@EnableBinding(Processor.class)
public class EventDrivenApplication {

public static void main(String[] args) {
    SpringApplication.run(EventDrivenApplication.class, args);
}

@StreamListener(target = Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Message<?> reRoute(Message<?> failed) {
Integer retries = failed.getHeaders().get("x-retries", Integer.class);

if (retries == null) {
        log.info("First retry for {}", failed);
        return MessageBuilder.fromMessage(failed)
                .setHeader(X_RETRIES_HEADER, new Integer(1))
                .setHeader(BinderHeaders.PARTITION_OVERRIDE, failed.getHeaders().get(KafkaHeaders.RECEIVED_PARTITION_ID))
                .build();
    } else if (retries.intValue() < 3) {
        log.info("Another retry for {}", failed);
        return MessageBuilder.fromMessage(failed)
                .setHeader(X_RETRIES_HEADER, new Integer(retries.intValue() + 1))
                .setHeader(BinderHeaders.PARTITION_OVERRIDE, failed.getHeaders().get(KafkaHeaders.RECEIVED_PARTITION_ID))
                .build();
    }
return null;
}
}

当我运行这个程序时,我得到以下错误信息--------。

SpringApplication : Application run failed
java.lang.IllegalArgumentException: Cannot set a condition for methods that return a value

为什么我们不能在一个有返回值的方法中写条件语句?

如果有人能帮我解决这个问题,我会非常感激。

java spring-boot apache-kafka spring-cloud-stream illegalargumentexception
1个回答
1
投票

conditions 在requestreply方法上不支持。

当使用条件时,多个监听器可以得到相同的消息,他们都不能返回回复。

我想检查可以更宽松一些,但事实并非如此。

© www.soinside.com 2019 - 2024. All rights reserved.