Error handling Kafka错误处理:Processor.output().send(message,kafkatimeoutims)始终返回true及其异步
可能这个问题已经报告并解决了。我没有找到解决方案,也没有任何关于这个问题的公开问题,所以创建一个新的。 我试图处理将数据发布到kafka topic时出现的错误。 有了卡夫卡春天的蒸汽,我们用这个Error handling Kafka错误处理:Processor.output().send(message,kafkatimeoutims)始终返回true及其异步,error-handling,apache-kafka,messaging,spring-cloud-stream,Error Handling,Apache Kafka,Messaging,Spring Cloud Stream,可能这个问题已经报告并解决了。我没有找到解决方案,也没有任何关于这个问题的公开问题,所以创建一个新的。 我试图处理将数据发布到kafka topic时出现的错误。 有了卡夫卡春天的蒸汽,我们用这个 if (processor.output().send(messsage , kafkaTimeoutInMS) && acknowledgment != null) { LOGGER.debug("Acknowl
if (processor.output().send(messsage , kafkaTimeoutInMS) && acknowledgment != null)
{
LOGGER.debug("Acknowledgment provided");
LOGGER.info("Sending to Kafka successful");
acknowledgment.acknowledge();
}
else
{
LOGGER.error("Sending to Kafka failed", message);
}
Send()方法始终返回true,我在调试模式下运行时尝试停止kafka manual,但它仍然返回true。我已经读到它是异步的
我试着设置
bindings: output: producer: sync: true
这没用。
但是我看到了一些错误,我不能用我的逻辑来判断是失败还是成功
我们正在手动确认,因此我们只应在其成功发送到主题时确认,并且我们需要记录所有失败的消息。
有什么建议吗?我相信你误解了spring cloud stream的工作原理。 作为一个框架,用户和框架之间有一定的契约,当涉及到消息传递时,ACK、重试、DLQ和许多其他方面都会自动处理,以确保用户不必手动暴露于此(正如您正在尝试的那样) 考虑花一点时间阅读用户指南- 此外,下面是一个非常基本的示例,它将演示用户(开发人员)与框架的典型交互。如您所见,您所做的只是实现一个简单的处理程序,它接收并返回一段数据。其余部分(从卡夫卡实际接收并发送到卡夫卡或任何其他消息传递系统)由框架提供的绑定器处理
@SpringBootApplication
@EnableBinding(Processor.class)
public class ProcessorApplication {
public static void main(String[] args) {
SpringApplication.run(ProcessorApplication.class);
}
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public String echo(String message) {
return message;
}
}