Estoy tratando de descubrir Spring Kafka. Mientras seguía la referencia, encontré un error en este ejemplo. No hay ningún método brokerListProperty() en la clase EmbeddedKafkaRule. ¿Cómo debo refactorizar el código para que funcione?

Código del enlace de arriba:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {

    @ClassRule
    public static EmbeddedKafkaRule broker = new EmbeddedKafkaRule(1,
        false, "someTopic")
            .brokerListProperty("spring.kafka.bootstrap-servers");
    }

    @Autowired
    private KafkaTemplate<String, String> template;

    @Test
    public void test() {
        ...
    }

}
2
Stormwaker 17 feb. 2020 a las 15:47

2 respuestas

La mejor respuesta

Junto con el @SpringBootTest considere usar un @EmbeddedKafka en su lugar. Ese tiene una propiedad como:

/**
 * The property name to set with the bootstrap server addresses instead of the default
 * {@value org.springframework.kafka.test.EmbeddedKafkaBroker#SPRING_EMBEDDED_KAFKA_BROKERS}.
 * @return the property name.
 * @since 2.3
 * @see org.springframework.kafka.test.EmbeddedKafkaBroker#brokerListProperty(String)
 */
String bootstrapServersProperty() default "";

El objetivo para un EmbeddedKafkaRule, cuando no usamos Spring en las pruebas en absoluto. Y estoy de acuerdo en que nos falta una propiedad de propagación de ese EmbeddedKafkaRule en un brokerListProperty(). Por favor, siéntase libre de plantear un problema de GH y contribuir con una solución al respecto.

Mientras tanto, puede solucionarlo así:

@ClassRule
public static EmbeddedKafkaRule broker = new EmbeddedKafkaRule(1, false, "someTopic");

@BeforeAll
pubic static void setup() {
    broker.getEmbeddedKafka().brokerListProperty("spring.kafka.bootstrap-servers");
}
1
Artem Bilan 17 feb. 2020 a las 14:28

Puede agregar brokerListProperty así usando KafkaTestUtils

    @Before
  public void setUp() throws Exception {
    // set up the Kafka producer properties
    Map<String, Object> senderProperties =
        KafkaTestUtils.senderProps(
            broker.getEmbeddedKafka().getBrokersAsString());
  }

Y puede seguir este tutorial parece bastante correcto.

1
Hatice 17 feb. 2020 a las 13:53