Kafka TestContainer 尝试连接到错误的地址

Posted

技术标签:

【中文标题】Kafka TestContainer 尝试连接到错误的地址【英文标题】:Kafka TestContainer tries to connect to wrong address 【发布时间】:2021-07-01 01:41:10 【问题描述】:

我正在学习如何使用 TestContainers 测试 Spring Boot Kafka 应用程序。测试通过。但是,一开始有很多这样的消息:

2021-04-05 09:00:13.927  WARN 1864 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient   : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

稍后,生产者连接到有效的引导服务器:

    bootstrap.servers = [PLAINTEXT://localhost:55015]

如何避免此类错误?它们会增加测试时间。

这里是代码:https://github.com/aleksei17/springboot-kafka/blob/master/src/test/java/com/example/kafka/springbootkafka/TestContainersTest1.java

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,解决了创建和 application-test.yml 的问题:

spring:
  kafka:
    bootstrap-servers: fake:1234

KafkaServerTestProvider.java:

@ActiveProfiles("test")
@Testcontainers
@Slf4j
public class KafkaServerTestProvider 
  public static final KafkaContainer KAFKA_CONTAINER =
      new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:latest"));

  public static class KafkaServerInitializer
      implements ApplicationContextInitializer<ConfigurableApplicationContext> 

    @Override
    public void initialize(final ConfigurableApplicationContext applicationContext) 
      KAFKA_CONTAINER.start();
      TestPropertyValues.of(
              "spring.kafka.bootstrap-servers=" + KAFKA_CONTAINER.getBootstrapServers())
          .applyTo(applicationContext.getEnvironment());

      log.info("Kafka for testing: ", KAFKA_CONTAINER.getBootstrapServers());
    
  

和测试:

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles("test")
@ContextConfiguration(
    initializers = KafkaServerTestProvider.KafkaServerInitializer.class,
    classes = Application.class)
class SampleServiceTestIT 
  @Autowired SampleService sampleService;

  @Test
  void sendMessageTest() 
    sampleService.sendMessage(
        "sampletopic",
        SampleRequest.builder().email("user@email.com").name("name").surname("surname").build());
  

【讨论】:

谢谢!将此行添加到初始化程序解决了问题:"spring.kafka.bootstrap-servers=" + kafka.getBootstrapServers() 通过做一些测试,我发现了一个奇怪的行为,解决了: TestPropertyValues.of( "spring.kafka.config-servers=" + KAFKA_CONTAINER.getBootstrapServers(), "spring.kafka.consumer. bootstrap-servers=" + KAFKA_CONTAINER.getBootstrapServers(), "spring.kafka.producer.bootstrap-servers=" + KAFKA_CONTAINER.getBootstrapServers()) .applyTo(applicationContext.getEnvironment()); 你确定有一个名为spring.kafka.config-servers的属性吗?我只见过spring.kafka.bootstrap-servers 或者它是您应用程序中的自定义属性? 是的,我有一个错字,它的 spring.kafka.bootstrap-servers...谢谢!

以上是关于Kafka TestContainer 尝试连接到错误的地址的主要内容,如果未能解决你的问题,请参考以下文章

TestContainer 中的 Spring Boot Cloud - 连接到没有 LoadBalancer/服务发现的 URL

如何使用 Junit 5 使用 Testcontainer 对 Kafka 运行集成测试

已连接到组协调器但无法连接到 kafka 节点

Sprint 启动 kafka Consumer 无法连接到 kafka 容器

无法将 Spring 应用程序连接到 debezium kafka

为啥我无法从外部连接到 Kafka?