Step-by-Step Guide to Building a Spring Cloud Eureka Server and Client with High Availability
This tutorial walks through creating a Spring Cloud microservice ecosystem by configuring a Eureka registration server, building a service provider and consumer with Spring Boot, demonstrating REST‑template and Ribbon integration, and setting up high‑availability Eureka clusters using multiple instances and load‑balancing strategies.
The article begins with a brief overview of Spring Cloud concepts, comparing monolithic servers to microservice clusters and introducing key components such as Eureka (service registry), Zuul (gateway) and Hystrix (circuit breaker).
1. Eureka Server Setup
It shows how to create a Maven project in IntelliJ IDEA, add the Spring Boot parent and Spring Cloud dependencies, and configure pom.xml for the Eureka server. The application.yml file is provided to set the server port (e.g., 8700) and disable client registration. The main class EurekaServerApplication.java is annotated with @SpringBootApplication and @EnableEurekaServer .
2. Service Provider (Eureka Service)
A second module is created for the service provider. Its pom.xml mirrors the server’s but changes the artifact name to client . The application.yml configures a different port (e.g., 8701) and points to the Eureka server URL. The provider’s entry class is annotated with @SpringBootApplication and @EnableDiscoveryClient . A simple @RestController exposing /Hello/World is added.
3. Service Consumer
The consumer module also registers with Eureka (port 8702) and includes a @RestController that uses three possible invocation methods:
Direct RestTemplate call to a fixed URL.
Load‑balanced call using LoadBalancerClient to select a service instance.
Ribbon‑enabled call with a @LoadBalanced RestTemplate bean, allowing restTemplate.getForObject("http://EUREKA‑SERVICE/Hello/World?s="+s, String.class) .
The bean configuration is shown with @Configuration , @Bean , and @LoadBalanced annotations.
4. High‑Availability Eureka Cluster
The guide explains how to run three Eureka instances on ports 8699, 8698 and 8697, modify each instance’s application.yml to point to the others via defaultZone , and start them as separate run configurations. It demonstrates that once any instance registers a service, all other Eureka nodes become aware of it, providing fault tolerance.
Finally, the article shows how to test the whole setup by accessing the consumer endpoint, observing load‑balanced calls, and verifying that the system continues to work even when one or two Eureka servers are shut down, highlighting the importance of cache refresh.
Top Architect
Top Architect focuses on sharing practical architecture knowledge, covering enterprise, system, website, large‑scale distributed, and high‑availability architectures, plus architecture adjustments using internet technologies. We welcome idea‑driven, sharing‑oriented architects to exchange and learn together.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.