
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