package io.jafka.producer;
import java.util.Map;
import java.util.Properties;
import io.jafka.producer.serializer.StringEncoder;
/**
* Simple String producer
*
* @author adyliu (imxylz@gmail.com)
* @since 1.8.0
*/
public class StringProducers {
private final Producer<String, String> producer;
private StringProducers(Properties props, boolean autoClosed) {
ProducerConfig config = new ProducerConfig(props);
producer = new Producer<String, String>(config);
if (autoClosed) {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
producer.close();
}
});
}
}
public Producer<String, String> getProducer() {
return this.producer;
}
/**
* send the message to message-queue
*
* @param message message
*/
public void send(StringProducerData message) {
producer.send(message);
}
private static volatile StringProducers instance = null;
/**
* create a producer each time
*
* @param props producer configuration
* @return a producer
*/
public static StringProducers build(Properties props, boolean autoClosed) {
return new StringProducers(props, autoClosed);
}
/**
* build the global producer (thread-safety)
*
* @param zookeeperConfig connect config of zookeeper; ex: 127.0.0.1:2181/jafka
* @return the global producer
*/
public static StringProducers buildGlobal(String zookeeperConfig) {
if (instance == null) {
synchronized (StringProducers.class) {
if (instance == null) {
final Properties props = new Properties();
props.put("zk.connect", zookeeperConfig);
props.put("serializer.class", StringEncoder.class.getName());
//
final String JAFKA_PREFIX = "jafka.";
for (Map.Entry<Object, Object> e : System.getProperties().entrySet()) {
String name = (String) e.getKey();
if (name.startsWith(JAFKA_PREFIX)) {
props.put(name.substring(JAFKA_PREFIX.length()), (String) e.getValue());
}
}
instance = new StringProducers(props, true);
}
}
}
return instance;
}
}