Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在@KafkaListener上使用@SendTo有条件地转发消息_Java_Spring_Spring Kafka - Fatal编程技术网

Java 在@KafkaListener上使用@SendTo有条件地转发消息

Java 在@KafkaListener上使用@SendTo有条件地转发消息,java,spring,spring-kafka,Java,Spring,Spring Kafka,我正在考虑使用@SendTo注释和@KafkaListener注释。我将收到一条消息,将进行最小的计算,这将不会超过一个方法调用。不过,该方法有可能引发异常。在这种情况下,我将抛出并捕捉异常。我想捕捉它。在这种情况下,是否可以不将对象/字符串转发到主题上,因为在我的系统中,发生异常应该是足够的原因,即对象/字符串的格式不正确,不适合进一步使用 编辑- 所以我在想类似于@cacheable的东西,除非 提前谢谢你 我认为@Cacheable.除非这里有点误导: /** * Spring Expr

我正在考虑使用@SendTo注释和@KafkaListener注释。我将收到一条消息,将进行最小的计算,这将不会超过一个方法调用。不过,该方法有可能引发异常。在这种情况下,我将抛出并捕捉异常。我想捕捉它。在这种情况下,是否可以不将对象/字符串转发到主题上,因为在我的系统中,发生异常应该是足够的原因,即对象/字符串的格式不正确,不适合进一步使用

编辑-

所以我在想类似于@cacheable的东西,除非

提前谢谢你

我认为@Cacheable.除非这里有点误导:

/**
 * 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;
        }
    }