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

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