Several months back I started to look at setting up a simple example app with Spring Boot microservices using Netflix Eureka as a service registry. I got distracted by other shiny things for a few months, but just went back to finish this off.
The example app comprises of 3 Spring Boot apps:
- SpringCloudEureka: registers the Eureka server using @EnableEurekaServer
- SpringBootService1 with endpoint POST /service1/example1/address
- registers with Eureka server with @EnableDiscoveryClient
- uses Ribbon load balancer aware RestTemplate to call Service2 to validate a zipcode
- SpringBootService2 provides endpoint GET /service2/zip/{zipcode} which is called by Service1
- also registers with Eureka server with @EnableDiscoveryClient so it can be looked up by Service1
SpringBootService1 and SpringBootService2 both register with the Eureka server using the annotation @EnableDiscoveryClient. Using some magic with @EnableFeignClients, SpringBootService1 is able to call SpringBootService2 using a regular Spring RestTemplate, but it is Eureka aware and able to lookup SpringBootService2 by service name inplace of an absolute ip and port.
This allows the services to be truly decoupled. Service1 needs to know it needs to call Service2 to perform some purpose (in this case validate a zip code), but it doesn’t need to know where Service2 is deployed or what ip address/port it is available on.
Example code is available on github here.