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

org.reactivecommons.async.impl.reply.ReactiveReplyRouter Maven / Gradle / Ivy

package org.reactivecommons.async.impl.reply;

import org.reactivecommons.async.impl.communications.Message;
import reactor.core.publisher.Mono;
import reactor.core.publisher.UnicastProcessor;
import reactor.util.concurrent.Queues;

import java.util.concurrent.ConcurrentHashMap;

public class ReactiveReplyRouter {
    private final ConcurrentHashMap> processors = new ConcurrentHashMap<>();

    public Mono register(String correlationID) {
        final UnicastProcessor processor = UnicastProcessor.create(Queues.one().get());
        processors.put(correlationID, processor);
        return processor.singleOrEmpty();
    }

    public void routeReply(String correlationID, Message data) {
        final UnicastProcessor processor = processors.remove(correlationID);
        if (processor != null) {
            processor.onNext(data);
            processor.onComplete();
        }
    }

    public  void routeError(String correlationID, String data) {
        final UnicastProcessor processor = processors.remove(correlationID);
        if (processor != null) {
            processor.onError(new RuntimeException(data));
        }
    }

    public void routeEmpty(String correlationID) {
        final UnicastProcessor processor = processors.remove(correlationID);
        if (processor != null) {
            processor.onComplete();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy