public void Run() { var microservicesDefinitions = _definitionProvider.GetMicroservicesDefinitions(); foreach (var microserviceDefinition in microservicesDefinitions) { _serverBuilder.AddServices(microserviceDefinition.Services); _microserviceContext.RegisterMicroservice(microserviceDefinition.Name, microserviceDefinition.Services.Select(s => s.Name)); } var grpcServer = _serverBuilder .EnableHttp() .ConfigurePort(_configurationProvider.GrpcServerPort) .Build(); var grpcServerThread = new Thread(grpcServer.Run); var managementThread = new Thread(_managementServerRunner.Run); var monitoringThread = new Thread(_monitoringDirector.Run); grpcServerThread.Start(); managementThread.Start(); monitoringThread.Start(); grpcServerThread.Join(); }