@PostConstruct public void createResolver() { if (config != null) { // always postConstruct resolve if config exist EurekaCommonConfig.ResolverType resolverType = config.getServerResolverType(); if (resolverType == null) { throw new IllegalArgumentException("Write cluster resolver type not defined"); } EurekaCommonConfig.ServerBootstrap[] bootstraps = EurekaCommonConfig.ServerBootstrap.from(config.getServerList()); switch (resolverType) { case dns: addressStream = fromDns(bootstraps); break; case fixed: addressStream = fromList(bootstraps); } } }
private static Observable<ChangeNotification<InetSocketAddress>> fromDns(ServerBootstrap[] bootstraps) { List<Observable<ChangeNotification<InetSocketAddress>>> addresses = new ArrayList<>(bootstraps.length); for (final ServerBootstrap sb : bootstraps) { Observable<ChangeNotification<InetSocketAddress>> stream = new DnsChangeNotificationSource(sb.getHostname()) .forInterest(null) .map(new Func1<ChangeNotification<String>, ChangeNotification<InetSocketAddress>>() { @Override public ChangeNotification<InetSocketAddress> call(ChangeNotification<String> notification) { return new ChangeNotification<>( notification.getKind(), new InetSocketAddress(notification.getData(), sb.getReplicationPort()) ); } }); addresses.add(stream); } return Observable.merge(addresses); }
private static ServerResolver forDNS(ServerBootstrap[] bootstraps) { if (bootstraps.length != 1) { throw new IllegalArgumentException("Expected one DNS name for server resolver, while got " + bootstraps.length); } return ServerResolvers.forDnsName(bootstraps[0].getHostname(), bootstraps[0].getDiscoveryPort()); }
private ServerResolver createWriteServerResolver(Func1<ServerBootstrap, Integer> getPortFunc) { EurekaCommonConfig.ResolverType resolverType = config.getServerResolverType(); if (resolverType == null) { throw new IllegalArgumentException("Write cluster resolver type not defined"); } ServerResolver resolver; ServerBootstrap[] bootstraps = ServerBootstrap.from(config.getServerList()); if (resolverType == ResolverType.dns) { resolver = forDNS(bootstraps, getPortFunc); } else { resolver = forFixed(bootstraps, getPortFunc); } return resolver; }
@Inject public DashboardEurekaClientBuilder(EurekaDashboardConfig config) { ServerResolver resolver; EurekaCommonConfig.ResolverType resolverType = config.getServerResolverType(); EurekaCommonConfig.ServerBootstrap[] bootstraps = EurekaCommonConfig.ServerBootstrap.from(config.getServerList()); if (resolverType == ResolverType.dns) { resolver = forDNS(bootstraps); } else { resolver = forFixed(bootstraps); } eurekaClient = Eureka.newClientBuilder(resolver).build(); }
private static ServerResolver forDNS(ServerBootstrap[] bootstraps, Func1<ServerBootstrap, Integer> getPortFunc) { if (bootstraps.length != 1) { throw new IllegalArgumentException("Expected one DNS name for server resolver, while got " + bootstraps.length); } return ServerResolvers.forDnsName(bootstraps[0].getHostname(), getPortFunc.call(bootstraps[0])); }
@Override public Integer call(ServerBootstrap server) { return server.getDiscoveryPort(); } });
private static ServerResolver forFixed(ServerBootstrap[] bootstraps, Func1<ServerBootstrap, Integer> getPortFunc) { Server[] servers = new Server[bootstraps.length]; for (int i = 0; i < bootstraps.length; i++) { servers[i] = new Server(bootstraps[i].getHostname(), getPortFunc.call(bootstraps[i])); } return ServerResolvers.from(servers); } }
@Override public Integer call(ServerBootstrap server) { return server.getRegistrationPort(); } }
@Override public ChangeNotification<InetSocketAddress> call(ChangeNotification<String> notification) { return new ChangeNotification<>( notification.getKind(), new InetSocketAddress(notification.getData(), sb.getReplicationPort()) ); } });
private static Observable<ChangeNotification<InetSocketAddress>> fromList(ServerBootstrap[] bootstraps) { List<ChangeNotification<InetSocketAddress>> addresses = new ArrayList<>(bootstraps.length); for (ServerBootstrap sb : bootstraps) { addresses.add(new ChangeNotification<>( Kind.Add, new InetSocketAddress(sb.getHostname(), sb.getReplicationPort())) ); } return Observable.from(addresses); } }
private static ServerResolver forFixed(ServerBootstrap[] bootstraps) { Server[] servers = new Server[bootstraps.length]; for (int i = 0; i < bootstraps.length; i++) { servers[i] = new Server(bootstraps[i].getHostname(), bootstraps[i].getDiscoveryPort()); } return ServerResolvers.from(servers); } }
public static ServerBootstrap[] from(String... hostnameAndPortsList) { ServerBootstrap[] servers = new ServerBootstrap[hostnameAndPortsList.length]; for (int i = 0; i < hostnameAndPortsList.length; i++) { servers[i] = new ServerBootstrap(hostnameAndPortsList[i]); } return servers; }