Netflix OSS: A beginner's guide [pt1]
First part of a series introducing the Netflix OSS microservices stack, starting with Eureka, the service registry. Walks through generating a Spring Boot project, configuring application.yml, and enabling the server with @EnableEurekaServer.
In this series of posts, I’ll try to get you inside the Netflix stack: understand how it works and get your feet wet in the microservices world.
So, to begin, we need to know the first component of the Netflix stack: Eureka
The Eureka is described by Netflix as
a REST based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers. We call this service, the Eureka Server. Eureka also comes with a Java-based client component,the Eureka Client, which makes interactions with the service much easier. The client also has a built-in load balancer that does basic round-robin load balancing.
So basically, Eureka is a register, that will know where which one of our services lives, how many instances of they are up (or down) and how to access them.
Thanks to Spring, all the complexity to get a Eureka server up and running was wrapped inside useful libraries that we’ll be using in this series.
So, enough with chit chat, let’s get to work.
Creating an Eureka Server using Spring
Get a Eureka Server to run is unbelievable easy. First, visit http://start.spring.io and fill the form as follow:

Pay attention to “Eureka Server” dependency listed.
Now, download the project clicking “Generate Project” and import it to your IDE (if you are using Eclipse, you can “mavenize” it running mvn eclipse:eclipse on root).
Now, if you open it, you’ll see an empty Spring Boot project, then, go to your application.yml (or application.properties if you prefer) and change as follow:
server: port: 8761eureka: numberRegistrySyncRetries: 1 instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ server: enable-self-preservation: trueExplaining the most important lines:
server: port: 8761Here, we are configuring the Eureka Server to run on port 8761. This is the default port and you can change, but you need to give this port to the clients later on.
eureka: numberRegistrySyncRetries: 1If you are running locally, there is a 2 to 3 minutes wait until fulling boot up. This happens because Eureka will be looking for peers. To disable this, set to 0 (although you should never do this in production)
client: registerWithEureka: falseAs this is the Eureka Server, we do not want it to register itself. Will always be set to false on server and true on the clients.
serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/the defaultZone is the fallback URL for every client that doesn’t specify a preference for a server.
Now, the only thing we should do is enable the Eureka Server.
To do so, go to the main class (at this point, you should only have one class in the project, though) and annotate it with @EnableEurekaServer, as follow
@EnableAutoConfiguration@EnableEurekaServerpublic class EurekaServerApplication {
public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); }}and start the server with mvn spring-boot:run
the latest log lines would be something like this
2016-06-07 21:34:38.624 INFO 723 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 02016-06-07 21:34:38.627 INFO 723 --- [ main] .p.EurekaConfigBasedInstanceInfoProvider : Setting initial instance status as: STARTING2016-06-07 21:34:39.120 INFO 723 --- [ main] com.netflix.discovery.DiscoveryClient : Not registering with Eureka server per configuration2016-06-07 21:34:39.127 INFO 723 --- [ main] c.n.e.EurekaDiscoveryClientConfiguration : Registering application bootstrap with eureka with status UP2016-06-07 21:34:39.202 WARN 723 --- [ Thread-2] c.n.eureka.PeerAwareInstanceRegistry : The replica size seems to be empty. Check the route 53 DNS Registry2016-06-07 21:34:39.362 INFO 723 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8761 (http)2016-06-07 21:34:39.366 INFO 723 --- [ main] com.inkdrop.EurekaServerApplication : Started EurekaServerApplication in 12.2 seconds (JVM running for 18.242)Access http://127.0.0.1:8761 and you’ll see this:

and that’s it! Your Eureka Server is up and running.
In the next post, we’ll create a microservice that will register itself on Eureka.
If you want to see the code already, go to the final github project
🍻 🍻