简体   繁体   中英

Testing listener with @EmbeddedKafka from spring-kafka-test

I'm trying to test listener in springboot created using @KafkaListener But listener always listens on localhost:9092 instead of using this embededKafka

My listener looks like this:


@Component
@Slf4j
class SomeListener {
    private final List<String> receivedMessages = new ArrayList<>();

    @KafkaListener(topics = "some-ultra-cool-topic")
    public void onKafkaMessage(String theMessage) {
        log.info("Message received {}", theMessage);
        receivedMessages.add(theMessage);
    }

    Collection<String> getAll() {
        return unmodifiableCollection(receivedMessages);
    }
}

And spock test like this:

@SpringBootTest
@EmbeddedKafka
@TestPropertySource(properties = ['spring.kafka.bootstrap-servers=${spring.embedded.kafka.brokers}', 'spring.kafka.consumer.auto-offset-reset=earliest'])
class SomeListenerTest extends Specification {
    @Autowired
    EmbeddedKafkaBroker embeddedKafkaBroker

    @Autowired
    SomeListener someListener

    void 'should receive message'() {
        given:
            def sender = new KafkaTemplate<>(new DefaultKafkaProducerFactory<String, String>(KafkaTestUtils.producerProps(embeddedKafkaBroker)))

        when:
            sender.send('some-ultra-cool-topic', 'first message content')
        then:
            someListener.all.size() == 1
    }

}

My application.yaml doesn't have bootstraps servers configured - so it is purly default from spring-boot.

I can see in logs that producer is sending message to broker (it starts every time on different random port). But listener always try to connect to broker on localhost:9092

How can I configure it to use this embedded one?

Thanks @sawim for tips

Actual problem was in test. I ended up doing this test with lib org.awaitility:awaitility

        then:
        waitAtMost(5, SECONDS)
                .untilAsserted({ ->
                    assertThat(personFacade.findAll(), hasSize(1))
                })

Configuration from first example works, however during startup I can see kafka-logs trying to connect to localhost:9200 - seems we can Ignore it

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM