
org.reactivecommons.async.rabbit.DynamicRegistryImp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of async-rabbit Show documentation
Show all versions of async-rabbit Show documentation
Abstract your broker with semantic async messages
The newest version!
package org.reactivecommons.async.rabbit;
import lombok.RequiredArgsConstructor;
import org.reactivecommons.async.api.DynamicRegistry;
import org.reactivecommons.async.api.handlers.DomainEventHandler;
import org.reactivecommons.async.api.handlers.QueryHandler;
import org.reactivecommons.async.api.handlers.QueryHandlerDelegate;
import org.reactivecommons.async.api.handlers.registered.RegisteredEventListener;
import org.reactivecommons.async.api.handlers.registered.RegisteredQueryHandler;
import org.reactivecommons.async.commons.HandlerResolver;
import org.reactivecommons.async.commons.config.IBrokerConfigProps;
import org.reactivecommons.async.rabbit.communications.TopologyCreator;
import reactor.core.publisher.Mono;
import reactor.rabbitmq.BindingSpecification;
@RequiredArgsConstructor
public class DynamicRegistryImp implements DynamicRegistry {
private final HandlerResolver resolver;
private final TopologyCreator topologyCreator;
private final IBrokerConfigProps props;
@Override
public Mono listenEvent(String eventName, DomainEventHandler fn, Class eventClass) {
resolver.addEventListener(new RegisteredEventListener<>(eventName, fn, eventClass));
return topologyCreator.bind(buildBindingSpecification(eventName))
.then();
}
@Override
public void serveQuery(String resource, QueryHandler handler, Class queryClass) {
resolver.addQueryHandler(new RegisteredQueryHandler<>(resource, (ignored, message) -> handler.handle(message)
, queryClass));
}
@Override
public void serveQuery(String resource, QueryHandlerDelegate handler, Class queryClass) {
resolver.addQueryHandler(new RegisteredQueryHandler<>(resource, handler, queryClass));
}
@Override
public Mono startListeningEvent(String eventName) {
return topologyCreator.bind(buildBindingSpecification(eventName))
.then();
}
@Override
public Mono stopListeningEvent(String eventName) {
return topologyCreator.unbind(buildBindingSpecification(eventName))
.then();
}
private BindingSpecification buildBindingSpecification(String eventName) {
return BindingSpecification.binding(props.getDomainEventsExchangeName(), eventName, props.getEventsQueue());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy