Java 在@KafkaListener上使用@SendTo有条件地转发消息
我正在考虑使用@SendTo注释和@KafkaListener注释。我将收到一条消息,将进行最小的计算,这将不会超过一个方法调用。不过,该方法有可能引发异常。在这种情况下,我将抛出并捕捉异常。我想捕捉它。在这种情况下,是否可以不将对象/字符串转发到主题上,因为在我的系统中,发生异常应该是足够的原因,即对象/字符串的格式不正确,不适合进一步使用 编辑- 所以我在想类似于@cacheable的东西,除非 提前谢谢你 我认为@Cacheable.除非这里有点误导:Java 在@KafkaListener上使用@SendTo有条件地转发消息,java,spring,spring-kafka,Java,Spring,Spring Kafka,我正在考虑使用@SendTo注释和@KafkaListener注释。我将收到一条消息,将进行最小的计算,这将不会超过一个方法调用。不过,该方法有可能引发异常。在这种情况下,我将抛出并捕捉异常。我想捕捉它。在这种情况下,是否可以不将对象/字符串转发到主题上,因为在我的系统中,发生异常应该是足够的原因,即对象/字符串的格式不正确,不适合进一步使用 编辑- 所以我在想类似于@cacheable的东西,除非 提前谢谢你 我认为@Cacheable.除非这里有点误导: /** * Spring Expr
/**
* Spring Expression Language (SpEL) expression used to veto method caching.
* <p>Unlike {@link #condition}, this expression is evaluated after the method
* has been called and can therefore refer to the {@code result}.
因此,在您的情况下,不要将错误消息传播到@SendTo,您只需从KafkaListenerErrorHandler.handleError返回任何内容即可。Right;只需从侦听器返回null,或者添加一个返回null的错误处理程序。任何一个都将禁止发送任何内容。是的,我正在考虑从@kafkalistener注释的方法返回null。与创建制作人并将其包装在卡夫卡模板中然后发送相比,使用sendto除了方便之外,可能不是最优雅的解决方案。我知道对于@sendto,我们将在创建生产者中执行相同的操作,将其放入Kafka模板中,然后使用Kafka模板配置ConcurrentKafkAlisterContainerFactory的回复模板属性。但是除了方便之外还有什么吗?您刚才已经解释了@SendTo机制在neathi下是如何工作的,我想问一下添加@SendTo注释背后的真正原因?除非方便,否则使用它有什么好处吗?
catch (ListenerExecutionFailedException e) {
if (this.errorHandler != null) {
try {
Object result = this.errorHandler.handleError(message, e, consumer);
if (result != null) {
handleResult(result, record, message);
}
}
catch (Exception ex) {
throw new ListenerExecutionFailedException(createMessagingErrorMessage(
"Listener error handler threw an exception for the incoming message",
message.getPayload()), ex);
}
}
else {
throw e;
}
}