com.landoop.lenses.topology.client.pulsar.metrics.PulsarTopologyClient Maven / Gradle / Ivy
package com.landoop.lenses.topology.client.pulsar.metrics;
import com.landoop.lenses.topology.client.JacksonSupport;
import com.landoop.lenses.topology.client.Publisher;
import com.landoop.lenses.topology.client.Topology;
import com.landoop.lenses.topology.client.TopologyClient;
import com.landoop.lenses.topology.client.metrics.Metrics;
import org.apache.pulsar.client.api.Producer;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.client.api.Schema;
import java.io.IOException;
import java.time.Duration;
public class PulsarTopologyClient {
public static final String TOPOLOGY_TOPIC_NAME = "__topology";
public static final String METRICS_TOPIC_NAME = "__topology__metrics";
public static TopologyClient create(PulsarClient client) throws PulsarClientException {
final Producer topologyProducer = client.newProducer(Schema.STRING).topic(TOPOLOGY_TOPIC_NAME).create();
final Producer metricsProducer = client.newProducer(Schema.STRING).topic(METRICS_TOPIC_NAME).create();
Publisher publisher = new Publisher() {
@Override
public void publish(Topology topology) throws IOException {
String value = JacksonSupport.mapper.writeValueAsString(topology);
topologyProducer.send(value);
}
@Override
public void publish(Metrics metrics) throws IOException {
String value = JacksonSupport.mapper.writeValueAsString(metrics);
metricsProducer.send(value);
}
@Override
public void flush() {
}
@Override
public void delete(String appName) {
}
@Override
public void close() {
try {
topologyProducer.close();
} catch (PulsarClientException e) {
e.printStackTrace();
}
try {
metricsProducer.close();
} catch (PulsarClientException e) {
e.printStackTrace();
}
}
};
return new TopologyClient(publisher, Duration.ofSeconds(5));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy