Friday, August 18, 2017

service-discovery-eureka-cloud-foundry

Eureka server

It is really easy to use Eureka with Spring Boot. The first thing you need to start is obviously the server:
  1. Go to https://start.spring.io/, add Eureka Server to the list of dependencies and generate the project.  
  2. Import the project in your IDE
  3. Open EurekaApplication.java and add @EnableEurekaServer. It should look like this:
  4. Add the following lines to application.yml to configure the server: (I prefer YAML, but it is also possible to use application.properties which is provided by the project from the Spring Initializer)
    The properties registerWithEureka: false and fetchRegistry: false prevent that the application acts as a Eureka client and server at the same time.

Eureka client

The next step is to create an application that registers with the service registry. Go to https://start.spring.io/ and create another application. This time add Eureka Discovery as a dependency:
After importing the project in your IDE, add @EnableEurekaClient in the Main class:
In application.yml only the application name and the default zone need to be set. The name will be used to register and the defaultZone is the URL of the Eureka server. For a local setup this will be http://127.0.0.1:8761/eureka/.
If you start both applications, the logs show that the testApp registers its instance:
Log output of testApp:
Log output of Eureka :
Eureka comes with a built-in web UI where it shows all registered services. Go to http://127.0.0.1:8761 to see the registered instance of testApp:

Now that the local setup is running, let’s take it to the cloud!

Cloud setup

The simplest way to deploy an application to Cloud Foundry is to upload the Jar file directly in Cloud Foundry’s web frontend. But this has some disadvantages. The configuration must be done manually and probably the biggest disadvantage: It is not automated!
To allow automated deployments a manifest file is needed (https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html). If you take a closer look at the manifest.yml of the Eureka server, you see the most relevant property host. This defines that the service will be reachable under eureka-test-service.cfapps.io.
To deploy the server to Cloud Foundry we will use the Cloud Foundry CLI. If you have not set up the CLI, you can look it up here: http://docs.cloudfoundry.org/cf-cli/
  1. First build the jar: mvn clean install
  2. Then push it to Cloud Foundry: cf push
Congratulations, you have deployed your Eureka server to Cloud Foundry! To verify this, go to http://eureka-test-service.cfapps.io and have a look at the web UI of Eureka.

Adding clients

A service registry without clients is pointless. Therefore the next step is to configure our testApp to use Eureka in the cloud. The easiest way would be to set the default zone to http://eureka-test-service.cfapps.io/eureka/, but this would bind the application to this single instance. If the URL changes you have to recompile the application. Instead of storing environment specific configuration in the application, the environment should provide the URL (see http://12factor.net/config). An easy way to provide the URL via an environment variable is a user provided service.

User provided service

A user provided service (https://docs.cloudfoundry.org/devguide/services/user-provided.html) with the name eureka and the URL of the service registry can be created with the following command:
To enable an application to use a service in Cloud Foundry you have to bind the service to the application.

Cloud profile

If the service is bound to our application it will provide the Eureka URL in the environment variable vcap.services.eureka.credentials.url. To use this in the testApp add a cloud specific spring profile to application.yml and set the defaultZone:
The hostname is set to vcap.application.uris[0]. This variable is provided by Cloud Foundry and contains the public URL of an application. This URL will be used to register with Eureka. Other services can then retrieve this URL from Eureka to connect to testApp.

Manifest

Just as the server project has a manifest.yml, so the testApp will have one:
  • The active spring profile is selected with the environment variable spring.profiles.active: cloud which can be set in the env attribute.
  • The service eureka is bound to this application in the services block.
The complete manifest.yml should look like this:

Deploy it to Cloud Foundry

  1. As usual first build the jar: mvn clean install
  2. Now push it to Cloud Foundry via CLI: cf push
The logs show the registration of the Eureka client with the Eureka server.
On the UI http://eureka-test-service.cfapps.io you can see that TESTAPP is registered.
That’s it! Within a few simple steps you have created a service registry with Spring Boot. First a Eureka server and client for a local setup, then configured both to be cloud ready and deployed them to Cloud Foundry.

No comments:

Post a Comment

உப்பு மாங்காய்

சுருக்குப்பை கிழவி. சுருக்கங்கள் சூழ் கிழவி. பார்க்கும் போதெல்லாம் கூடையுடனே குடியிருப்பாள். கூடை நிறைய குட்டி குட்டி மாங்காய்கள். வெட்டிக்க...