我正在考虑将@SendTo
注释与@KafkaListener
注释一起使用。我将收到一条消息,将进行最小的计算,这将只是一个方法调用。但是,该方法有可能引发异常。在这种情况下,我将抛出然后捕获异常(想要抓住它)。在这种情况下,是否有可能不将对象/字符串转发到主题上,因为在我的系统中,发生的异常应该足够合理,对象/字符串格式错误且不适合进一步使用?
编辑 -
所以我在思考类似于@ cacheable-的内容,除非?
提前谢谢!
答案 0 :(得分:1)
我认为@Cacheable.unless()
在这里有点误导:
/**
* 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}.
您会看到它是针对方法结果执行的。在您的情况下,您正在讨论异常,因此您需要考虑使用@KafkaListener.errorHandler()
,其工作原理如下:
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;
}
}
因此,在您的情况下,不要向@SendTo
传播错误的消息,您应该只从KafkaListenerErrorHandler.handleError()
返回任何内容。