java - 如何解决 Spring Cloud Stream 中的“IllegalArgumentException:无法为返回值的方法设置条件”?
问题描述
我有一个处理死信队列的 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
为什么我们不能在有返回值的方法中编写条件语句?
如果有人帮助我解决这个问题,我将不胜感激。
解决方案
conditions
请求/回复方法不支持。
使用条件时,多个侦听器可以获得相同的消息,并且它们都无法返回回复。
我想检查可能会更宽松,但事实并非如此。
推荐阅读
- utf-8 - Camel中的java.io包找不到标题中带有特殊字符的文件
- flutter - 如何截取基于AndroidViews实现的WebView(webview_flutter)?
- php - PHP INSERT 由于某些未知原因而无法正常工作
- python - python中的密码求解器循环计数
- c# - Visual Studio 在已处理的异常上中断,就好像它是未处理的一样
- c++ - C++ 显示超级回文
- javascript - 如何使用 webapp2(python) 存储来自 ajax 的数据
- html - 当 flex:1 工作时,固定侧边栏不会保持固定
- reactjs - 将类转换为函数式:传递状态对象
- java - 当我尝试验证我的 jsf 输入时,如何修复此错误 ClassCastException