
io.scalecube.services.routing.RandomServiceRouter Maven / Gradle / Ivy
package io.scalecube.services.routing;
import io.scalecube.services.Messages;
import io.scalecube.services.ServiceReference;
import io.scalecube.services.api.ServiceMessage;
import io.scalecube.services.registry.api.ServiceRegistry;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ThreadLocalRandom;
public class RandomServiceRouter implements Router {
private final ServiceRegistry serviceRegistry;
public RandomServiceRouter(ServiceRegistry serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
@Override
public Optional route(ServiceMessage request) {
String serviceName = Messages.qualifierOf(request).getNamespace();
List serviceInstances = serviceRegistry.lookupService(serviceName);
if (!serviceInstances.isEmpty()) {
int index = ThreadLocalRandom.current().nextInt((serviceInstances.size()));
return Optional.of(serviceInstances.get(index));
} else {
return Optional.empty();
}
}
@Override
public List routes(ServiceMessage request) {
return serviceRegistry.lookupService(Messages.qualifierOf(request).getNamespace());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy