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

no.nav.common.kafka.producer.util.KafkaProducerClientBuilder Maven / Gradle / Ivy

package no.nav.common.kafka.producer.util;

import io.micrometer.core.instrument.MeterRegistry;
import lombok.NonNull;
import no.nav.common.kafka.producer.KafkaProducerClient;
import no.nav.common.kafka.producer.KafkaProducerClientImpl;

import java.util.Properties;

public class KafkaProducerClientBuilder {

    private Properties properties;

    private Properties additionalProperties;

    private MeterRegistry meterRegistry;

    private KafkaProducerClientBuilder() {}

    public static  KafkaProducerClientBuilder builder() {
        return new KafkaProducerClientBuilder<>();
    }

    public KafkaProducerClientBuilder withProperties(@NonNull Properties properties) {
        this.properties = (Properties) properties.clone();
        return this;
    }

    /**
     * Adds additional properties that will overwrite properties from {@link #withProperties(Properties)}.
     * Useful for configuring a producer with additional properties when using a preset from
     * {@link no.nav.common.kafka.util.KafkaPropertiesPreset} as the base.
     * @param properties additional properties
     * @return this builder
     */
    public KafkaProducerClientBuilder withAdditionalProperties(@NonNull Properties properties) {
        this.additionalProperties = (Properties) properties.clone();
        return this;
    }

    /**
     * Adds an additional property that will overwrite properties from {@link #withProperties(Properties)}.
     * Useful for configuring a producer with additional properties when using a preset from
     * {@link no.nav.common.kafka.util.KafkaPropertiesPreset} as the base.
     * @param name property name
     * @param value property value
     * @return this builder
     */
    public KafkaProducerClientBuilder withAdditionalProperty(@NonNull String name, Object value) {
        if (additionalProperties == null) {
            additionalProperties = new Properties();
        }

        additionalProperties.put(name, value);
        return this;
    }

    public KafkaProducerClientBuilder withMetrics(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
        return this;
    }

    public KafkaProducerClient build() {
        if (properties == null) {
            throw new IllegalStateException("Cannot build kafka producer without properties");
        }

        if (additionalProperties != null) {
            properties.putAll(additionalProperties);
        }

        return createClient(properties, meterRegistry);
    }

    private KafkaProducerClient createClient(Properties properties, MeterRegistry meterRegistry) {
        KafkaProducerClient producerClient = new KafkaProducerClientImpl<>(properties);

        if (meterRegistry != null) {
            producerClient = new KafkaProducerClientWithMetrics<>(producerClient, meterRegistry);
        }

        return producerClient;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy