我希望KafkaProducer因为任何原因在kafka主题上生成记录时失败而导致进程失败。
我发送的记录如下:
for(String message : messages) {
producer.send(new ProducerRecord<>(topic, message), (metadata, ex) -> {
if (ex != null) {
throw new RuntimeException(ex.getMessage());
}
});
}
我在电话中抛出异常。所以我的期望是该过程将失败,显然for循环继续执行。
一旦我们在Callback中遇到任何异常,如何使发送过程失败?
答案 0 :(得分:0)
首先,如果send命令成功,变量“ex”将为null,因此,查看您包含的代码,只要消息成功发送,就不会抛出RuntimeException。 p>
如果您想强制错误检查哪种行为我建议您停止所有经纪人,然后尝试发送消息。一段时间后,当超时发生时,您将能够在回调中看到异常。
总结:
Successful send: (metadata != null, ex == null)
Failed send: (metadata == null, ex != null)
P.S。请记住在抛出异常时关闭生产者:
for(String message : messages) {
producer.send(new ProducerRecord<>(topic, message), (metadata, ex) -> {
if (ex != null) {
producer.close();
throw new RuntimeException("Exception Happened: " + ex.getMessage());
}
});
}