【发布时间】:2017-09-07 08:26:50
【问题描述】:
我在我的应用程序中使用 Kafka,我想在 kafka 发送消息期间处理超时异常。接下来我尝试做:在回调中抛出运行时异常并在方法调用中捕获它。
这是 kafka 调用:
public final class ManualKafkaBetsProducer implements IKafkaBetsProducer
{
@Autowired
private KafkaTemplate<ReportsBetKey, IReportsBet> template;
public void send(IReportsBet bet)
{
template.send(MessageBuilder.withPayload(bet).setHeader(KafkaHeaders.TOPIC, kafkaBetsTopicName)
.setHeader(KafkaHeaders.MESSAGE_KEY, new ReportsBetKey(bet)).build())
.addCallback(res -> logger.debug("Message {} send OK"), ex -> {
throw new RuntimeException(ex);
});
}
}
这是方法调用:
try
{
manualKafkaBetsProducer.send(bet);
}
catch (Exception ex)
{
return TransactionResultType.GENERAL_ERROR.name();
}
问题是:当超时expeption发生时,它并没有进入catch块。当发生其他一些错误时,它可以正常工作。 任何想法如何处理这个? 谢谢。
【问题讨论】:
标签: java apache-kafka spring-kafka