/** * Return a server resolver that resolves from a fixed list of servers using a round robin strategy * * @param servers a list of servers to resolve from * @return {@link ServerResolver} */ public static ServerResolver from(final Server... servers) { return new RoundRobinServerResolver(servers); }
@Override public Observable<Server> resolve() { return refreshServerCache().concatMap(new Func1<List<Server>, Observable<? extends Server>>() { @Override public Observable<? extends Server> call(List<Server> servers) { if (servers.isEmpty()) { return Observable.error(SERVER_CACHE_EMPTY_EXCEPTION); } int currentPos = Math.abs(positionRef.getAndIncrement()); Server toReturn = servers.get(currentPos % servers.size()); return Observable.just(toReturn); } }); }
/** * Return a server resolver that resolves from a stream of servers using a best effort round robin strategy, * where BufferSentinels are used to buffer and snapshot the servers to lists for round robin. * * @param serverSource an observable servers to resolve from * @return {@link ServerResolver} */ public static ServerResolver fromServerSource(final Observable<ChangeNotification<Server>> serverSource) { return new RoundRobinServerResolver(serverSource); }
public RoundRobinServerResolver withWarmUpConfiguration(int newWarmUpTimeout, TimeUnit newTimeUnit) { return new RoundRobinServerResolver(serverSource, newWarmUpTimeout, newTimeUnit); }
ServerResolver resolver = new RoundRobinServerResolver(serverSource);