SpringKafka生产者阻塞http线程,直到kafka线程完成

vmjh9lq9  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(368)

出于企业原因,我们使用springboot构建了一个应用程序,并使用springkafka项目发布kafka消息。
我一直在测试生成kafka事件,并注意到spring正在阻塞http线程,直到kafka线程完成。

try {
ListenableFuture<SendResult<String, OnboardingSigningNotificationEvent>> send = this.kafkaTemplate.send(TOPIC, notificationEvent);

  send.addCallback(new ListenableFutureCallback<SendResult<String, OnboardingSigningNotificationEvent>>() {
    @Override
    public void onSuccess(SendResult<String, OnboardingSigningNotificationEvent> sendResult) {
      log.info("Successfully published onboarding signing notification event with record metadata timestamp: {}", sendResult.getRecordMetadata().timestamp());
    }
    @Override
    public void onFailure(Throwable throwable) {
      log.error("Failure while publishing kafka event : {}", throwable.getMessage());
    }
  });
} finally {
  kafkaTemplate.flush();
}

这与本文档中所述内容相矛盾。https://docs.spring.io/spring-kafka/docs/current/reference/html/#sending-消息
注意send方法返回listenablefuture。您可以向侦听器注册回调以异步接收发送的结果。
基于文档,我希望producer调用是异步进行的,并且主http线程不会阻塞等待它,但这不是我在测试中看到的。即使我阻塞kafka线程几秒钟,调用方http线程也会被阻塞。
你能解释一下这是否是故意的,是否有任何配置来覆盖这个行为吗。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题