Eureka not able to find port when running microservices on random port
Asked Answered
S

1

2

I am using eureka for service discover and ribbon for load balancing in my spring boot application. When i run my micro services which are registered with eureka on a fix port it works fine but when i run them on random port though i can see services registered on eureka dashboard it is not able to find the port number. and i get the following error when trying to hit the service.

   2018-11-27 07:55:15.853  INFO 7240 --- [nio-8079-exec-1] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client MYAPP initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=MYAPP,current list of Servers=[nawnit:0, nawnit:0],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;    Instance count:2;   Active connections count: 0;    Circuit breaker tripped count: 0;   Active connections per server: 0.0;]
},Server stats: [[Server:nawnit:0;  Zone:defaultZone;   Total Requests:0;   Successive connection failure:0;    Total blackout seconds:0;   Last connection made:Thu Jan 01 05:30:00 IST 1970;  First connection made: Thu Jan 01 05:30:00 IST 1970;    Active Connections:0;   total failure count in last (1000) msecs:0; average resp time:0.0;  90 percentile resp time:0.0;    95 percentile resp time:0.0;    min resp time:0.0;  max resp time:0.0;  stddev resp time:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@563d5f30
2018-11-27 07:55:15.907 ERROR 7240 --- [nio-8079-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "http://MYAPP/validation/1": connect: Address is invalid on local machine, or port is not valid on remote machine; nested exception is java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine] with root cause

java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) ~[na:1.8.0_181]
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_181]
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_181]
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_181]
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_181]
    at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_181]
    at java.net.Socket.connect(Socket.java:538) ~[na:1.8.0_181]
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) ~[na:1.8.0_181]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_181]
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_181]
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_181]
    at sun.net.www.http.HttpClient.New(HttpClient.java:339) ~[na:1.8.0_181]
    at sun.net.www.http.HttpClient.New(HttpClient.java:357) ~[na:1.8.0_181]
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220) ~[na:1.8.0_181]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156) ~[na:1.8.0_181]
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) ~[na:1.8.0_181]
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984) ~[na:1.8.0_181]
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
    at org.spr

This is my controller class from which i am calling another service.

public ResponseEntity<BaseResponse> verifyEmail(@RequestBody CustomerIdentity identity,
            @PathVariable Integer simID) throws HttpClientErrorException {
        System.out.println(this.discoveryClient.getInstances("MYAPP").get(0).getUri().toString());
        return restTemplate.postForEntity("http://MYAPP"+ "/validation/" + simID, identity, BaseResponse.class);
    }

this is the property that i have added

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

My service is registered with eureka with name MYAPP .i have also tried the print the url as you can see,it gives http://nawnit:8080 when running on a fix port but when running on random port i get http://nawnit:0 (nawnit is my pc name)

This is my configuration property of eureka server.

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF

pom.xml of eureka client:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.M3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

Note: The restTemplate that i am using is configured as load balanced.

Sublimity answered 27/11, 2018 at 2:39 Comment(5)
Remove the version from the ribbon starter and change it tospring-cloud-starter-netflix-ribbon and try again.Ribaldry
i'll try that..but does ribbon has anything to do with eureka? cos if you will see the print statement which is using doscoveryclinet to get the url i suppose that is independent of ribbon right?Sublimity
This is a bug. Follow github.com/spring-cloud/spring-cloud-netflix/issues/3294 for progress.Ribaldry
@Ribaldry thanks. just out of curiosity how did you get to know its a bug? I mean how did you make it sure its a bug?i dont doubt you i just wanted to know.Sublimity
Created a project and it failed like yours, changing to Finchley.SR2 worked, so I knew it was a regression. Now we have a test to check it.Ribaldry
R
1

This is a bug and has been fixed. See https://github.com/spring-cloud/spring-cloud-netflix/issues/3294 for a test that recreated the issue. Fixes were also made here https://github.com/spring-cloud/spring-cloud-commons/issues/451

This should be available next week (Dec 6, 2018) as part of Greenwich.RC1. See https://github.com/spring-cloud/spring-cloud-release/milestones for updates.

Ribaldry answered 28/11, 2018 at 20:8 Comment(7)
so once it gets released then only i can have the updated code?will it work if i clone the repository i suppose it has your changes?Sublimity
You can do that, but we also deploy snapshots to repo.spring.ioRibaldry
@NawnitSen In the meantime stick with spring-cloud-starter-netflix-eureka-client 2.0.2Looper
@MartinSchröder except that doesn't work with boot 2.1.xRibaldry
@Ribaldry Which is why I've gone back to Spring Boot 2.0.xLooper
Greenwich.RELEASE is available now that is compatible with boot 2.1.xRibaldry
@Ribaldry I'm seeing the same issue with Hoxton.SR3 and spring-cloud-starter-netflix-ribbon. When the server registers as port 0, the client is seeing the URL as machine:0 rather than the resolved port.Ermentrude

© 2022 - 2024 — McMap. All rights reserved.