The services are registered to Eureka normally and when I call the getServices() method of DiscoverClient, I am able to find the corresponding service, but when I call it using the load balanced RestTemplate, the following error occurs.
2021-03-09 08:26:59.683 WARN 6548 --- [oundedElastic-1] o.s.c.l.core.RoundRobinLoadBalancer : No servers available for service: seeiner-event-example
The version of Spring Cloud I am using is 2020.0.1.
Here is my test code:
@Test
public void call() {
System.out.println(discoveryClient.getServices());
ResponseEntity<String> callback = restTemplate
.postForEntity("http://seeiner-event-example/CallDevice", null, String.class);
}
And here is full output. `[seeiner-qrcode-server, seeiner-uims, seeiner-pay, seeiner-receive-data, seeiner-pigeon-server, seeiner-asset-server, seeiner-bill, seeiner-car, seeiner-idcard-1966923408, seeiner-sms-1233802984, seeiner-contract, seeiner-password--1858991553, seeiner-device, seeiner-event-example, seeiner-es, seeiner-thirdparty, seeiner-file, seeiner-customer, seeiner-weather, seeiner-push-data] 2021-03-09 08:26:59.683 WARN 6548 --- [oundedElastic-1] o.s.c.l.core.RoundRobinLoadBalancer : No servers available for service: seeiner-event-example
java.lang.IllegalArgumentException: Service Instance cannot be null.
at org.springframework.cloud.client.loadbalancer.LoadBalancerUriTools.reconstructURI(LoadBalancerUriTools.java:90)
at org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.reconstructURI(BlockingLoadBalancerClient.java:136)
at org.springframework.cloud.client.loadbalancer.ServiceRequestWrapper.getURI(ServiceRequestWrapper.java:42)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:98)
at org.springframework.cloud.client.loadbalancer.LoadBalancerRequestFactory.lambda$createRequest$0(LoadBalancerRequestFactory.java:58)
at org.springframework.cloud.client.loadbalancer.LoadBalancerRequestAdapter.apply(LoadBalancerRequestAdapter.java:43)
at org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.execute(BlockingLoadBalancerClient.java:99)
at org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor.lambda$intercept$2(RetryLoadBalancerInterceptor.java:129)
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:329)
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:225)
at org.springframework.cloud.client.loadbalancer.RetryLoadBalancerInterceptor.intercept(RetryLoadBalancerInterceptor.java:79)
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93)
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711)
at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:468)
at cn.seeiner.ep.server.TestRemote.call(TestRemote.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
`
config of seeiner-event-example (producer service)
eureka:
client:
service-url:
defaultZone: http://192.168.2.102:10100/eureka
fetch-registry: true
register-with-eureka: true
instance:
appname: seeiner-event-example
lease-expiration-duration-in-seconds: 30
lease-renewal-interval-in-seconds: 30
prefer-ip-address: true
config of consumer service
eureka:
client:
service-url:
defaultZone: http://192.168.2.102:10100/eureka
register-with-eureka: true
fetch-registry: true
instance:
appname: seeiner-event-processor
instance-id: seeiner-event-processor
lease-expiration-duration-in-seconds: 60
lease-renewal-interval-in-seconds: 30
prefer-ip-address: true
Comment From: OlgaMaciaszek
@LLLLimbo , please provide a minimal, complete, verifiable example that reproduces the issue.
Comment From: LLLLimbo
@LLLLimbo , please provide a minimal, complete, verifiable example that reproduces the issue.
Hi OlgaMaciaszek, I have solved the problem, which was caused by the difference between spring.application.name and eureka.instance.appname.