我正在用Spring Boot编写一个应用程序,所以我要写给Kafka:
@Autowired private KafkaTemplate<String, String> kafkaTemplate;
然后在我的方法里面:
kafkaTemplate.send(topic, data)
但是我觉得我只是依靠它来工作,我怎么知道它是否起作用?如果它是异步的,那么返回200代码并希望它能奏效是个好习惯吗?我很困惑。如果没有Kafka,这不会失败吗?不应该提示我捕获异常吗?
是的,如果Kafka不可用,该.send()呼叫将失败,但是如果您异步发送它,则不会通知任何人。您可以指定将来最终完成时要执行的回调。完整的接口规范在这里:https : //kafka.apache.org/20/javadoc/org/apache/kafka/clients/producer/Callback.html
.send()
从此处的官方Kafka Javadoc:https : //kafka.apache.org/20/javadoc/index.html? org/apache/kafka/clients/producer/ KafkaProducer.html
完全非阻塞的用法可以利用Callback参数提供将在请求完成后调用的回调。
> ProducerRecord<byte[],byte[]> record = new > ProducerRecord<byte[],byte[]>("the-topic", key, value); > producer.send(myRecord, > new Callback() { > public void onCompletion(RecordMetadata metadata, > Exception e) { > if(e != null) { > e.printStackTrace(); > } else { > System.out.println("The offset of the record we > just sent is: " + metadata.offset()); > } > } > });