All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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