@Override
    public void publish(Object payload, DynamicOptions transportOptions, Integer destinationId, State state)
            throws ConnectionUnavailableException {
        Sink transport = transports.get(destinationId);
        try {
            transport.publish(payload, transportOptions, state);
        } catch (ConnectionUnavailableException e) {
            transport.setConnected(false);
            strategy.destinationFailed(destinationId);
            log.warn("Failed to publish payload to destination ID " + destinationId + ", " + e.getMessage(), e);
            transport.connectWithRetry();
            throw e;
        }
    }
This is the distributed transport to publish to multiple endpoints using client/publisher for each endpoint. There
will be a separate independent {@link Sink} instance connecting to each destination. This class interacts
with Sink interface and it does not make any assumptions on the underlying transport implementation.
modules/siddhi-core/src/main/java/io/siddhi/core/util/transport/MultiClientDistributedSink.java