
dev.vality.testcontainers.annotations.kafka.config.KafkaConsumer Maven / Gradle / Ivy
package dev.vality.testcontainers.annotations.kafka.config;
import dev.vality.kafka.common.serialization.AbstractThriftDeserializer;
import dev.vality.testcontainers.annotations.kafka.KafkaTestcontainer;
import lombok.RequiredArgsConstructor;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.thrift.TBase;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
import org.springframework.kafka.listener.ContainerProperties;
import org.springframework.kafka.listener.MessageListener;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Листенер для чтения данных из тестового трифтового топика
* Для получения конкретного сообщения необходимо имплементировать в тесте интерфейс
* {@link MessageListener}
* Пример использования {@link KafkaTestcontainer} с {@link KafkaConsumer} — в
* sink-drinker
*
Пример
* {@code
* @Autowired
* private KafkaConsumer testPayoutEventKafkaConsumer;
*
* ...
*
* testPayoutEventKafkaConsumer.read(topicName, data -> readEvents.add(data.value()));
* Unreliables.retryUntilTrue(TIMEOUT, TimeUnit.SECONDS, () -> readEvents.size() == expected);
*
* ...
* }
*
* @see KafkaConsumerConfig KafkaConsumerConfig
*/
@RequiredArgsConstructor
public class KafkaConsumer> {
private final String bootstrapAddress;
private final AbstractThriftDeserializer deserializer;
public void read(String topic, MessageListener messageListener) {
var container = new ConcurrentMessageListenerContainer<>(
consumerFactory(),
containerProperties(topic, messageListener));
container.start();
}
private ContainerProperties containerProperties(String topic, MessageListener messageListener) {
var containerProperties = new ContainerProperties(topic);
containerProperties.setMessageListener(messageListener);
return containerProperties;
}
private DefaultKafkaConsumerFactory consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfig(), new StringDeserializer(), deserializer);
}
private Map consumerConfig() {
var properties = new HashMap();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
properties.put(ConsumerConfig.GROUP_ID_CONFIG, UUID.randomUUID().toString());
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
return properties;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy