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

forklift.retry.RetryRunnable Maven / Gradle / Ivy

package forklift.retry;

import forklift.connectors.ForkliftConnectorI;
import forklift.connectors.ForkliftSerializer;
import forklift.producers.ForkliftProducerI;
import forklift.source.SourceI;
import forklift.source.sources.QueueSource;
import forklift.source.sources.TopicSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Base64;
import java.util.Map;
import java.util.function.Consumer;

public class RetryRunnable implements Runnable {
    public static final Logger log = LoggerFactory.getLogger(RetryRunnable.class);

    private String id;
    private Map fields;
    private ForkliftConnectorI connector;
    private Consumer complete;

    public RetryRunnable(String id, Map fields, ForkliftConnectorI connector, Consumer complete) {
        this.id = id;
        this.fields = fields;
        this.connector = connector;
        this.complete = complete;
    }

    @Override
    public void run() {
        ForkliftProducerI producer = null;
        SourceI destinationSource = null;

        try {
            final String destinationType = fields.get("destination-type");
            final String destinationName = fields.get("destination-name");

            if ("queue".equals(destinationType)) {
                producer = connector.getQueueProducer(destinationName);
                destinationSource = new QueueSource(destinationName);
            } else if ("topic".equals(destinationType)) {
                producer = connector.getTopicProducer(destinationName);
                destinationSource = new TopicSource(destinationName);
            }
        } catch (Throwable e) {
            log.error("", e);
            e.printStackTrace();
            return;
        }

        final String messageFormat = fields.get("destination-message-format");
        String roleMessage = fields.get("destination-message");

        if ("base64-bytes".equals(messageFormat)) {
            ForkliftSerializer serializer = connector.getDefaultSerializer();

            roleMessage = serializer.deserializeForSource(
                destinationSource, Base64.getDecoder().decode(roleMessage));
        } else if(!"raw-string".equals(messageFormat)) {
            log.error("Unrecognized message format '{}' while retrying message", messageFormat);
        }

        try {
            producer.send(roleMessage);
        } catch (Exception e) {
            log.error("Unable to resend msg", e);
            // TODO schedule this message to run again.
            return;
        }

        complete.accept(id);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy