package com.xiaomi.infra.galaxy.talos.storm.talos; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.xiaomi.infra.galaxy.rpc.thrift.Credential; import com.xiaomi.infra.galaxy.talos.admin.TalosAdmin; import com.xiaomi.infra.galaxy.talos.consumer.SimpleConsumer; import com.xiaomi.infra.galaxy.talos.consumer.TalosConsumerConfig; import com.xiaomi.infra.galaxy.talos.thrift.DescribeTopicRequest; import com.xiaomi.infra.galaxy.talos.thrift.Topic; import com.xiaomi.infra.galaxy.talos.thrift.TopicAndPartition; import libthrift091.TException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Provide talos clients to use * Created by jiasheng on 16-5-12. */ public class TalosCluster { private static final Logger LOG = LoggerFactory.getLogger(TalosCluster.class); private final TalosConsumerConfig config; private final Credential credential; private TalosAdmin talosAdmin; private LoadingCache<TopicAndPartition, SimpleConsumer> cachedSimpleConsumers; public TalosCluster(TalosConsumerConfig talosConsumerConfig, final Credential credential) { this.config = talosConsumerConfig; this.credential = credential; cachedSimpleConsumers = CacheBuilder.newBuilder() .build(new CacheLoader<TopicAndPartition, SimpleConsumer>() { @Override public SimpleConsumer load(TopicAndPartition topicAndPartition) { return new SimpleConsumer(config, topicAndPartition, credential); } }); } public synchronized TalosAdmin getAdmin() { if (talosAdmin == null) { talosAdmin = new TalosAdmin(config, credential); LOG.info("Initialized TalosAdmin."); } return talosAdmin; } public SimpleConsumer getSimpleConsumer(TopicAndPartition topicPartition) { return cachedSimpleConsumers.getUnchecked(topicPartition); } public Topic describeTopic(String topic) throws TException { return getAdmin().describeTopic(new DescribeTopicRequest(topic)); } }