Closed trickert76 closed 5 years ago
Ah, I forgot - in this situation - when I use a Feign client, this client doesn't work too, becaus it uses the same mechanism from the Eureka client.
Sorry - but that is still an issue to me. To run a Eureka service and a Eureka client in one Application Server is (maybe) not the preferred way of using them - but there are situation and options - and in that case I miss here some kind of ideas or other solutions. I'm sure, that this is a bug.
The CloudConfig client should always try to reach the discovery/config service, if it isn't successfull at the first pitch. There should be some kind of "fault tolerance".
The issue was closed only because it was stale, it you experience this on the latest version consider opening a new one with a minimal repro, based on the stack traces it looks more like a set up issue but hard to say. Also would be best to exclude Spring Cloud or any external frameworks from the minimal repro.
I've a very strange setup - some of our customers need a "supported application server" as a runtime environment and they don't want two or more servers runing (only one). So, our Spring boot application need to run in one application server but without code changes also on two, three or more for other customers or as JARs. Because all of that, I cannot use EARs.
The infrastructure for the problem is very simple. A Eureka server, a Cloud Config Server and a simple Eureka/CloudConfig client in one Application server. When the WARs of the servers are up and running, I can put the client WAR into deployments, then the client service connects to the Eureka server, find the instance of the cloud config server, reads the configuration and everything is okay.
But when I shutdown/restart the application server (Wildfly, JBoss, WLS), I run into a race condition. The client service cannot reach the servers. This is the bootstrap.yml
The initialInterval reduces the number of retries during bootstrap. But after everything is up, the client and the configuration service is registered in Eureka, but I get every 30sec or so an exception from the client, that it cannot find a CONFIGURATION instance.
The problem is, that the autowired configurations that values are stored in the config server are null. I tried to make a Thread.sleep() in the SpringBootServletInitializer.configure(SpringApplicationBuilder application), but that doesn't help too.
The following exception is the first, that comes during startup, saying, it cannot connect (which is okay for me, everything is starting parallel). This is of course from the Eureka client.
A second exception comes a little bit later:
And then - the end - the Cloud config cannot be loaded and every 30sec the following exception comes up. All AutoWired fields are null. The application is up, but it cannot be used
First - I'm not sure, if this is a Cloud Config or a Eureka Client problem, but, because the Eureka client is registered after the Eureka server is up, I don't see a point, why the 30sec exception should come up. There is a CONFIGURATION instance available and a MYCLIENT instance, but the Cloud Config client doesn't check again. I've got a notion that DiscoveryClient.getInstances(serviceId) doesn't make a new request.
I drilled down the Client code and ended on the Netflix Eureka client. So, I hope I'm right, this should be rechecked by the Eureka client.