小编典典

断言Kafka发送工作

java

我正在用Spring Boot编写一个应用程序,所以我要写给Kafka:

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

然后在我的方法里面:

kafkaTemplate.send(topic, data)

但是我觉得我只是依靠它来工作,我怎么知道它是否起作用?如果它是异步的,那么返回200代码并希望它能奏效是个好习惯吗?我很困惑。如果没有Kafka,这不会失败吗?不应该提示我捕获异常吗?


阅读 247

收藏
2020-11-30

共1个答案

小编典典

是的,如果Kafka不可用,该.send()呼叫将失败,但是如果您异步发送它,则不会通知任何人。您可以指定将来最终完成时要执行的回调。完整的接口规范在这里:https
:
//kafka.apache.org/20/javadoc/org/apache/kafka/clients/producer/Callback.html

从此处的官方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());
>                        }
>                    }
>                });
2020-11-30