Open In App

How Eureka Server and Client Communicate with Each Other in Microservices?

Last Updated : 01 Aug, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Service Discovery is one of the major things of a microservice-based architecture. Eureka is the Netflix Service Discovery Server and Client. The server can be configured and deployed to be highly functional, with each server copying the state of the registered services to the others. In the previous article, we have seen How to Register Microservices Using Netflix Eureka but how this communication happens between Eureka Server and Eureka Client. In this article, we are going to discuss this.

Note: Please make sure you have followed this article How to Register Microservices Using Netflix Eureka

Scenario 1: Port is 8761 (Default Port)

In Scenario 1 let’s say our discovery service is running on port no 8761

server.port=8761

So in this case when the service starts they know where Eureka usually runs which is 8761. So they use default http://localhost:8761/eureka to connect and register themselves with Eureka.

Eureka-Server-and-Client-Communicate-1.webp

What happens when we change the port of Eureka? Let’s see this in Scenario 2.

Scenario 2: Port is 5000 (Random Port)

In Scenario 2 let’s say our discovery service is running on port no 5000

server.port=5000

Now run your demo-microservice again and you can see the following errors in your console.

Request execution error. endpoint=DefaultEndpoint{ serviceUrl=’http://localhost:8761/eureka/}, exception=I/O error on GET request for “http://localhost:8761/eureka/apps/”: Connect to http://localhost:8761 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: no further information stacktrace=org.springframework.web.client.ResourceAccessException: I/O error on GET request for “http://localhost:8761/eureka/apps/”: Connect to http://localhost:8761 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: no further information

Here is the full console.

"C:\Users\Amiya Rout\.jdks\corretto-17.0.6\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.1\lib\idea_rt.jar=57605:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.2.1\bin" -Dfile.encoding=UTF-8 -classpath "D:\Microservice Demo\gfg-microservices-demo\demomicroservice\target\classes;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter-web\3.0.6\spring-boot-starter-web-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter\3.0.6\spring-boot-starter-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot\3.0.6\spring-boot-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\3.0.6\spring-boot-autoconfigure-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter-logging\3.0.6\spring-boot-starter-logging-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\ch\qos\logback\logback-classic\1.4.7\logback-classic-1.4.7.jar;C:\Users\Amiya Rout\.m2\repository\ch\qos\logback\logback-core\1.4.7\logback-core-1.4.7.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.19.0\log4j-to-slf4j-2.19.0.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\logging\log4j\log4j-api\2.19.0\log4j-api-2.19.0.jar;C:\Users\Amiya Rout\.m2\repository\org\slf4j\jul-to-slf4j\2.0.7\jul-to-slf4j-2.0.7.jar;C:\Users\Amiya Rout\.m2\repository\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\Users\Amiya Rout\.m2\repository\org\yaml\snakeyaml\1.33\snakeyaml-1.33.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter-json\3.0.6\spring-boot-starter-json-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.14.2\jackson-databind-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.14.2\jackson-datatype-jdk8-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.14.2\jackson-datatype-jsr310-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.14.2\jackson-module-parameter-names-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\3.0.6\spring-boot-starter-tomcat-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\10.1.8\tomcat-embed-core-10.1.8.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\10.1.8\tomcat-embed-el-10.1.8.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.8\tomcat-embed-websocket-10.1.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-web\6.0.8\spring-web-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-beans\6.0.8\spring-beans-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\io\micrometer\micrometer-observation\1.10.6\micrometer-observation-1.10.6.jar;C:\Users\Amiya Rout\.m2\repository\io\micrometer\micrometer-commons\1.10.6\micrometer-commons-1.10.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-webmvc\6.0.8\spring-webmvc-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-aop\6.0.8\spring-aop-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-context\6.0.8\spring-context-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-expression\6.0.8\spring-expression-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-eureka-client\4.0.1\spring-cloud-starter-netflix-eureka-client-4.0.1.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-starter\4.0.2\spring-cloud-starter-4.0.2.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-context\4.0.2\spring-cloud-context-4.0.2.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\security\spring-security-crypto\6.0.3\spring-security-crypto-6.0.3.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-commons\4.0.2\spring-cloud-commons-4.0.2.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\security\spring-security-rsa\1.0.11.RELEASE\spring-security-rsa-1.0.11.RELEASE.jar;C:\Users\Amiya Rout\.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.69\bcpkix-jdk15on-1.69.jar;C:\Users\Amiya Rout\.m2\repository\org\bouncycastle\bcprov-jdk15on\1.69\bcprov-jdk15on-1.69.jar;C:\Users\Amiya Rout\.m2\repository\org\bouncycastle\bcutil-jdk15on\1.69\bcutil-jdk15on-1.69.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-netflix-eureka-client\4.0.1\spring-cloud-netflix-eureka-client-4.0.1.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\httpcomponents\client5\httpclient5\5.1.4\httpclient5-5.1.4.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\httpcomponents\core5\httpcore5\5.1.5\httpcore5-5.1.5.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\httpcomponents\core5\httpcore5-h2\5.1.5\httpcore5-h2-5.1.5.jar;C:\Users\Amiya Rout\.m2\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;C:\Users\Amiya Rout\.m2\repository\com\netflix\eureka\eureka-client\2.0.0\eureka-client-2.0.0.jar;C:\Users\Amiya Rout\.m2\repository\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;C:\Users\Amiya Rout\.m2\repository\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;C:\Users\Amiya Rout\.m2\repository\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;C:\Users\Amiya Rout\.m2\repository\joda-time\joda-time\2.3\joda-time-2.3.jar;C:\Users\Amiya Rout\.m2\repository\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;C:\Users\Amiya Rout\.m2\repository\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;C:\Users\Amiya Rout\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Amiya Rout\.m2\repository\com\google\code\gson\gson\2.9.1\gson-2.9.1.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;C:\Users\Amiya Rout\.m2\repository\com\thoughtworks\xstream\xstream\1.4.19\xstream-1.4.19.jar;C:\Users\Amiya Rout\.m2\repository\io\github\x-stream\mxparser\1.2.2\mxparser-1.2.2.jar;C:\Users\Amiya Rout\.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\Amiya Rout\.m2\repository\jakarta\ws\rs\jakarta.ws.rs-api\3.1.0\jakarta.ws.rs-api-3.1.0.jar;C:\Users\Amiya Rout\.m2\repository\jakarta\inject\jakarta.inject-api\2.0.1\jakarta.inject-api-2.0.1.jar;C:\Users\Amiya Rout\.m2\repository\com\netflix\servo\servo-core\0.12.21\servo-core-0.12.21.jar;C:\Users\Amiya Rout\.m2\repository\com\google\guava\guava\19.0\guava-19.0.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\httpcomponents\httpclient\4.5.14\httpclient-4.5.14.jar;C:\Users\Amiya Rout\.m2\repository\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\Users\Amiya Rout\.m2\repository\commons-configuration\commons-configuration\1.10\commons-configuration-1.10.jar;C:\Users\Amiya Rout\.m2\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.14.2\jackson-annotations-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.14.2\jackson-core-2.14.2.jar;C:\Users\Amiya Rout\.m2\repository\org\codehaus\jettison\jettison\1.4.0\jettison-1.4.0.jar;C:\Users\Amiya Rout\.m2\repository\com\netflix\eureka\eureka-core\2.0.0\eureka-core-2.0.0.jar;C:\Users\Amiya Rout\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;C:\Users\Amiya Rout\.m2\repository\com\fasterxml\woodstox\woodstox-core\6.2.1\woodstox-core-6.2.1.jar;C:\Users\Amiya Rout\.m2\repository\org\codehaus\woodstox\stax2-api\4.2.1\stax2-api-4.2.1.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-starter-loadbalancer\4.0.2\spring-cloud-starter-loadbalancer-4.0.2.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\cloud\spring-cloud-loadbalancer\4.0.2\spring-cloud-loadbalancer-4.0.2.jar;C:\Users\Amiya Rout\.m2\repository\io\projectreactor\reactor-core\3.5.5\reactor-core-3.5.5.jar;C:\Users\Amiya Rout\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\Amiya Rout\.m2\repository\io\projectreactor\addons\reactor-extra\3.5.1\reactor-extra-3.5.1.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\boot\spring-boot-starter-cache\3.0.6\spring-boot-starter-cache-3.0.6.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-context-support\6.0.8\spring-context-support-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;C:\Users\Amiya Rout\.m2\repository\org\slf4j\slf4j-api\2.0.7\slf4j-api-2.0.7.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-core\6.0.8\spring-core-6.0.8.jar;C:\Users\Amiya Rout\.m2\repository\org\springframework\spring-jcl\6.0.8\spring-jcl-6.0.8.jar" com.gfg.demomicroservice.DemoMicroserviceApplication

. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.6)

2023-05-16T13:48:09.363+05:30 INFO 15604 --- [ main] c.g.d.DemoMicroserviceApplication : Starting DemoMicroserviceApplication using Java 17.0.6 with PID 15604 (D:\Microservice Demo\gfg-microservices-demo\demomicroservice\target\classes started by Amiya Rout in D:\Microservice Demo\gfg-microservices-demo\demomicroservice)
2023-05-16T13:48:09.370+05:30 INFO 15604 --- [ main] c.g.d.DemoMicroserviceApplication : No active profile set, falling back to 1 default profile: "default"
2023-05-16T13:48:10.986+05:30 INFO 15604 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=2f2df148-7b2d-3872-ab8a-37e596647a7f
2023-05-16T13:48:11.449+05:30 INFO 15604 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9090 (http)
2023-05-16T13:48:11.471+05:30 INFO 15604 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2023-05-16T13:48:11.472+05:30 INFO 15604 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.8]
2023-05-16T13:48:11.648+05:30 INFO 15604 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2023-05-16T13:48:11.654+05:30 INFO 15604 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2178 ms
2023-05-16T13:48:12.675+05:30 INFO 15604 --- [ main] DiscoveryClientOptionalArgsConfiguration : Eureka HTTP Client uses RestTemplate.
2023-05-16T13:48:12.858+05:30 WARN 15604 --- [ main] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with the default cache. While this cache implementation is useful for development and tests, it's recommended to use Caffeine cache in production.You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2023-05-16T13:48:12.901+05:30 INFO 15604 --- [ main] o.s.c.n.eureka.InstanceInfoFactory : Setting initial instance status as: STARTING
2023-05-16T13:48:13.039+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Initializing Eureka in region us-east-1
2023-05-16T13:48:13.047+05:30 INFO 15604 --- [ main] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Disable delta property : false
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Force full registry fetch : false
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Application is null : false
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Registered Applications size is zero : true
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Application version is -1: true
2023-05-16T13:48:13.078+05:30 INFO 15604 --- [ main] com.netflix.discovery.DiscoveryClient : Getting all instance registry info from the eureka server
2023-05-16T13:48:13.627+05:30 INFO 15604 --- [ main] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error. endpoint=DefaultEndpoint{ serviceUrl='http://localhost:8761/eureka/}, exception=I/O error on GET request for "http://localhost:8761/eureka/apps/": Connect to http://localhost:8761 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: no further information stacktrace=org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://localhost:8761/eureka/apps/": Connect to http://localhost:8761 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: no further information
at org.springframework.web.client.RestTemplate.createResourceAccessException(RestTemplate.java:888)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:868)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:764)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:646)
at org.springframework.cloud.netflix.eureka.http.RestTemplateEurekaHttpClient.getApplicationsInternal(RestTemplateEurekaHttpClient.java:145)
at org.springframework.cloud.netflix.eureka.http.RestTemplateEurekaHttpClient.getApplications(RestTemplateEurekaHttpClient.java:135)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:121)
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:80)
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134)
-------------------------------------------------------------------------------------------------------------

So in this scenario, we need to let these services know where Eureka is running. For example in this case http://localhost:5000/. If we don’t do it it will by default try to look for Eureka in the 8761 port number and that will result in an exception and registration failure.

Eureka-Server-and-Client-Communicate-2.webp

How to Fix It?

To fix it you have to add the following line in the application.properties file of demo-microservice

eureka.client.service-url.defaultZone=http://localhost:5000/eureka/

This will fix your issue.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads