Spring Kafka Producer阻塞http线程直到Kafka线程完成

时间:2021-03-04 11:42:44

标签: spring spring-boot apache-kafka spring-kafka

出于企业原因,我们使用 spring boot 构建了一个应用程序,并使用 spring Kafka 项目来发布 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-messages

<块引用>

请注意,send 方法返回一个 ListenableFuture。 您可以向侦听器注册回调以接收结果 异步发送。

根据文档,我希望生产者调用是异步进行的,并且主 http 线程不会阻塞等待它,但这不是我在测试中看到的。即使我阻塞了 kafka 线程几秒钟,调用者的 http 线程也会被阻塞。

您能否解释一下这是否是故意的,是否有任何配置可以覆盖此行为。

0 个答案:

没有答案
相关问题