public RpcClient<RESPONSE> build() { if (StringUtils.isBlank(serviceName)) { throw new IllegalStateException("RpcClientBuilder: Service name was not set"); } if (StringUtils.isBlank(methodName)) { throw new IllegalStateException("RpcClientBuilder: Method name was not set"); } LoadBalancerFactory lbFactory = injector.getInstance(LoadBalancerFactory.class); LoadBalancer loadBalancer = lbFactory.getLoadBalancer(serviceName); return new RpcClient<>(loadBalancer, serviceName, methodName, retries, timeout, retryBackOffFunction, responseClass); }
public synchronized LoadBalancer getLoadBalancer(String serviceName) { LoadBalancer retval = loadBalancers.get(serviceName); if (retval == null) { retval = buildLoadBalancer(serviceName); } return retval; }
private void initializeLoadBalancerFactory(Injector localInjector) { ServiceDiscoveryProvider provider = localInjector.getInstance(ServiceDiscoveryProvider.class); if (provider != null) { LoadBalancerFactory lbFactory = localInjector.getInstance(LoadBalancerFactory.class); lbFactory.initialize(provider); } }
private ServiceUnderTestImpl(String serviceName, boolean useEventHandler, String kafkaTopic) { ServiceProperties serviceProperties = new ServiceProperties(); serviceProperties.initialize(new String[0]); TestInjectionModule baseModule = new ServiceUnderTestModule(serviceName, serviceProperties); Injector injector = Guice.createInjector(baseModule, new ServiceRegistryModule(serviceProperties), new TracingModule(serviceProperties)); ServiceDiscoveryProvider provider = injector.getInstance(ServiceDiscoveryProvider.class); loadBalancerFactory = injector.getInstance(LoadBalancerFactory.class); loadBalancerFactory.initialize(provider); loadBalancer = loadBalancerFactory.getLoadBalancer(serviceName); loadBalancer.waitForServiceInstance(); RpcClientFactory rpcClientFactory = injector.getInstance(RpcClientFactory.class); RpcMethodScanner rpcMethodScanner = new RpcMethodScanner(rpcClientFactory); serviceMethods = rpcMethodScanner.getMethodHandlers(serviceName); httpCommandProxy = injector.getInstance(HttpCommandProxy.class); httpCommandProxy.setServiceName(serviceName); if (useEventHandler) { eventHandler = injector.getInstance(ServiceTestEventHandler.class); eventHandler.initialize(kafkaTopic); } }
@Override public void shutdown() { loadBalancerFactory.shutdown(); }
public void shutdown() { healthCheckManager.shutdown(); loadBalancerFactory.shutdown(); registrationManager.shutdown(); messageHandler.shutdown(); }
private synchronized String getServiceBaseUrl() { if (serviceBaseUrl == null) { LoadBalancer lb = lbFactory.getLoadBalancer(serviceName); lb.waitForServiceInstance(); com.sixt.service.framework.rpc.ServiceEndpoint endpoint = lb.getHealthyInstance(); serviceBaseUrl = "http://" + endpoint.getHostAndPort(); } return serviceBaseUrl; }
public ServiceImpersonator(String serviceName, ServiceProperties props) throws Exception { //ServiceImpersonator needs its own injection stack so that each mock service // and the service under test get their own ecosystem this.serviceName = serviceName; TestInjectionModule testInjectionModule = new ServiceImpersonatorModule(serviceName, props); serviceProperties = testInjectionModule.getServiceProperties(); serviceProperties.setServiceName(serviceName); //has to be before getting regMgr serviceProperties.setServiceInstanceId(UUID.randomUUID().toString()); serviceProperties.addProperty("registry", "consul"); injector = Guice.createInjector(testInjectionModule, new ServiceRegistryModule(serviceProperties), new TracingModule(serviceProperties)); ServiceDiscoveryProvider provider = injector.getInstance(ServiceDiscoveryProvider.class); LoadBalancerFactory lbFactory = injector.getInstance(LoadBalancerFactory.class); lbFactory.initialize(provider); registrationManager = injector.getInstance(RegistrationManager.class); healthCheckManager = injector.getInstance(HealthCheckManager.class); rpcMethodScanner = new RpcMethodScanner(injector.getInstance(RpcClientFactory.class)); methodHandlers = injector.getInstance(MethodHandlerDictionary.class); messageHandler = injector.getInstance(MessageHandler.class); factory = injector.getInstance(KafkaPublisherFactory.class); initialize(); }
private void initialize() throws Exception { buildMethodHandlers(serviceName.replaceAll("-", "_")); registrationManager.setRegisteredHandlers(methodHandlers.getMethodHandlers()); registrationManager.register(); messageHandler.setServiceName(serviceName); messageHandler.start(); while(! registrationManager.isRegistered()) { logger.info("Waiting for service registration of {}", serviceName); new Sleeper().sleepNoException(100); } healthCheckManager.initialize(); loadBalancerFactory = injector.getInstance(LoadBalancerFactory.class); loadBalancerFactory.getLoadBalancer(serviceName).waitForServiceInstance(); }
public RpcClientIntegrationTest(String featureFlag) { this.featureFlag = featureFlag; TestInjectionModule module = new TestInjectionModule(featureFlag); ServiceProperties props = new ServiceProperties(); props.addProperty(FeatureFlags.FLAG_EXPOSE_ERRORS_HTTP, featureFlag); props.addProperty(FeatureFlags.DISABLE_RPC_INSTANCE_RETRY, "true"); props.addProperty(ServiceProperties.REGISTRY_SERVER_KEY, "localhost:65432"); props.addProperty("registry", "consul"); module.setServiceProperties(props); Injector injector = Guice.createInjector(module, new ServiceRegistryModule(props), new TracingModule(props)); httpClient = (MockHttpClient)injector.getInstance(HttpClient.class); clientFactory = injector.getInstance(RpcClientFactory.class); loadBalancerFactory = injector.getInstance(LoadBalancerFactory.class); rpcClient = clientFactory.newClient(serviceName, "testing", FrameworkTest.Foobar.class).build(); loadBalancer = (LoadBalancerImpl) loadBalancerFactory.getLoadBalancer(serviceName); dependencyHealthCheck = mock(ServiceDependencyHealthCheck.class); }