package org.atlasapi.messaging.v3; import org.joda.time.Duration; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.metabroadcast.common.queue.MessageConsumerFactory; import com.metabroadcast.common.queue.MessageSenderFactory; import com.metabroadcast.common.queue.kafka.KafkaConsumer; import com.metabroadcast.common.queue.kafka.KafkaMessageConsumerFactory; import com.metabroadcast.common.queue.kafka.KafkaMessageSenderFactory; import static com.google.common.base.Preconditions.checkNotNull; @Configuration public class KafkaMessagingModule implements MessagingModule { @Value("${messaging.broker.url}") private String brokerUrl; @Value("${messaging.zookeeper}") private String zookeeper; @Value("${messaging.system}") private String messagingSystem; @Value("${messaging.backOffIntervalMillis}") private Long backOffIntervalMillis; @Value("${messaging.maxBackOffMillis}") private Long maxBackOffMillis; public KafkaMessagingModule( String brokerUrl, String zookeeper, String messagingSystem, Long backOffIntervalMillis, Long maxBackOffMillis ) { this.brokerUrl = checkNotNull(brokerUrl); this.zookeeper = checkNotNull(zookeeper); this.messagingSystem = checkNotNull(messagingSystem); this.backOffIntervalMillis = checkNotNull(backOffIntervalMillis); this.maxBackOffMillis = checkNotNull(maxBackOffMillis); } public KafkaMessagingModule() { } @Override @Bean public MessageSenderFactory messageSenderFactory() { return new KafkaMessageSenderFactory(brokerUrl, messagingSystem); } @Override @Bean public MessageConsumerFactory<KafkaConsumer> messageConsumerFactory() { return new KafkaMessageConsumerFactory( zookeeper, messagingSystem, Duration.millis(backOffIntervalMillis), Duration.millis(maxBackOffMillis) ); } }