spring-native icon indicating copy to clipboard operation
spring-native copied to clipboard

is there any certain result for support resttemplate with eureka and loadbalancer

Open enderwsp opened this issue 3 years ago • 5 comments

get demo [BlockingLoadbalancer] from https://github.com/spring-projects-experimental/spring-native/pull/1143 native compile is ok,then native-image run successfully

after add hits in main class [BlockingLoadbalancerClienSampleApplication]


@InitializationHint(types = ColorConverter.class, initTime = InitializationTime.BUILD) @TypeHint( types = { org.springframework.context.annotation.Conditional.class }, methods = {@MethodHint(name = "value")} ) @TypeHint(types = {org.springframework.context.annotation.ConfigurationClassPostProcessor.class , org.springframework.context.event.EventListenerMethodProcessor.class , org.springframework.context.event.DefaultEventListenerFactory.class , org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.class , org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.class , org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration.class } , typeNames = {"org.springframework.boot.autoconfigure.condition.OnBeanCondition"}, methods = { @MethodHint(name = "") } ) @TypeHint(types = org.springframework.cloud.context.named.NamedContextFactory.class, methods = { @MethodHint(name = "destroy") , @MethodHint(name = "getContextNames") , @MethodHint(name = "getParent") , @MethodHint(name = "getInstance" , parameterTypes = {java.lang.String.class, java.lang.Class.class}) , @MethodHint(name = "createContext" , parameterTypes = {java.lang.String.class}) , @MethodHint(name = "getContext" , parameterTypes = {java.lang.String.class}) , @MethodHint(name = "getInstance" , parameterTypes = {java.lang.String.class, java.lang.Class.class, java.lang.Class[].class}) , @MethodHint(name = "getInstance" , parameterTypes = {java.lang.String.class, org.springframework.core.ResolvableType.class}) , @MethodHint(name = "getInstances" , parameterTypes = {java.lang.String.class, java.lang.Class.class}) , @MethodHint(name = "getLazyProvider" , parameterTypes = {java.lang.String.class, java.lang.Class.class}) , @MethodHint(name = "getProvider" , parameterTypes = {java.lang.String.class, java.lang.Class.class}) , @MethodHint(name = "setApplicationContext" , parameterTypes = {org.springframework.context.ApplicationContext.class}) , @MethodHint(name = "setConfigurations" , parameterTypes = {java.util.List.class}) } ) @TypeHint(types = org.springframework.context.support.PropertySourcesPlaceholderConfigurer.class, methods = {@MethodHint(name = "getAppliedPropertySources") , @MethodHint(name = "postProcessBeanFactory", parameterTypes = org.springframework.beans.factory.config.ConfigurableListableBeanFactory.class) , @MethodHint(name = "setPropertySources", parameterTypes = org.springframework.core.env.PropertySources.class)} ) @TypeHint(types = org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.class, methods = { @MethodHint(name = "") , @MethodHint(name = "propertySourcesPlaceholderConfigurer") } ) @TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean.class, methods = {@MethodHint(name = "annotation") , @MethodHint(name = "ignored") , @MethodHint(name = "ignoredType") , @MethodHint(name = "name") , @MethodHint(name = "parameterizedContainer") , @MethodHint(name = "search") , @MethodHint(name = "type") , @MethodHint(name = "value")} ) @TypeHint(types = org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class, methods = { @MethodHint(name = "") , @MethodHint(name = "loadBalancedRestTemplateInitializerDeprecated", parameterTypes = org.springframework.beans.factory.ObjectProvider.class) , @MethodHint(name = "loadBalancerRequestFactory", parameterTypes = org.springframework.cloud.client.loadbalancer.LoadBalancerClient.class) } ) @TypeHint(types = org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.class, methods = { @MethodHint(name = "choose", parameterTypes = java.lang.String.class) , @MethodHint(name = "choose", parameterTypes = {java.lang.String.class , org.springframework.cloud.client.loadbalancer.Request.class}) , @MethodHint(name = "execute", parameterTypes = {java.lang.String.class , org.springframework.cloud.client.ServiceInstance.class , org.springframework.cloud.client.loadbalancer.LoadBalancerRequest.class}) , @MethodHint(name = "execute", parameterTypes = {java.lang.String.class , org.springframework.cloud.client.loadbalancer.LoadBalancerRequest.class}) , @MethodHint(name = "reconstructURI", parameterTypes = {org.springframework.cloud.client.ServiceInstance.class , java.net.URI.class}) } ) @TypeHint(types = org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class, methods = { @MethodHint(name = "", parameterTypes = org.springframework.beans.factory.ObjectProvider.class) , @MethodHint(name = "loadBalancerClientFactory", parameterTypes = org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties.class) , @MethodHint(name = "zoneConfig", parameterTypes = org.springframework.core.env.Environment.class) } ) @TypeHint(types = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class, methods = { @MethodHint(name = "getInstance", parameterTypes = java.lang.String.class) , @MethodHint(name = "getProperties", parameterTypes = java.lang.String.class) } ) @TypeHint(types = org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration.class, methods = { @MethodHint(name = "") , @MethodHint(name = "blockingLoadBalancerClient", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class) , @MethodHint(name = "loadBalancerServiceInstanceCookieTransformer", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class) , @MethodHint(name = "xForwarderHeadersTransformer", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class) } ) @TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnBean.class, methods = {@MethodHint(name = "annotation") , @MethodHint(name = "name") , @MethodHint(name = "parameterizedContainer") , @MethodHint(name = "search") , @MethodHint(name = "type") , @MethodHint(name = "value")} ) @TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnBean.class, methods = {@MethodHint(name = "annotation") , @MethodHint(name = "name") , @MethodHint(name = "parameterizedContainer") , @MethodHint(name = "search") , @MethodHint(name = "type") , @MethodHint(name = "value")} ) @InitializationHint(types = { org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class , org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class , org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class , org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.class }, initTime = InitializationTime.BUILD) @TypeHint(typeNames = "com.example.loadbalancerclient.config.CustomServiceInstanceListSupplier")


but i get error when try a rest test ,and i have no idea to fix,so is there any certain result for support resttemplate with eureka

need help @OlgaMaciaszek

2022-05-06 11:33:42.081 ERROR 11513 --- [nio-8081-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 java.lang.IllegalStateException: No instances available for custom-test-service] with root cause java.lang.IllegalStateException: No instances available for custom-test-service at org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.execute(BlockingLoadBalancerClient.java:84) ~[loadbalancer-client-blocking:3.1.1] at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:56) ~[na:na] at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) ~[na:na] at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77) ~[na:na] at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[na:na] at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[na:na] at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)


enderwsp avatar May 06 '22 05:05 enderwsp

base env spring-native 0.11.3 graalvm-maven 0.9.10 graalvm jdk11-linux 22.0.0.2 springboot 2.6.4 springcloud 2021.0.1

enderwsp avatar May 06 '22 05:05 enderwsp

I get a weird thing,rewrite class can work on jvm run,but not on native run

enderwsp avatar May 07 '22 02:05 enderwsp

change to webclient instead of resttemplate

I get same error,


WARN 2022-05-07 10:48:31.276 [speed4j.hlw.app [http-nio-8090-exec-3] WARN [http-nio-8090-exec-3] o.s.c.c.l.r.ReactorLoadBalancerExchangeFilterFunction - LoadBalancer does not contain an instance for the service ims-param-basics DEBUG 2022-05-07 10:48:31.277 [speed4j.hlw.app [http-nio-8090-exec-3] DEBUG [http-nio-8090-exec-3] o.s.core.codec.ByteArrayDecoder - Read 74 bytes org.springframework.web.reactive.function.client.WebClientResponseException$ServiceUnavailable: 503 Service Unavailable from UNKNOWN

enderwsp avatar May 07 '22 02:05 enderwsp

Hello @enderwsp , Spring Cloud LoadBalancer does not yet have native support.

OlgaMaciaszek avatar May 16 '22 13:05 OlgaMaciaszek

Waiting for child context support in Spring Framework to be introduced before we can provide Spring Cloud LoadBalancer support.

OlgaMaciaszek avatar May 16 '22 13:05 OlgaMaciaszek

Spring Native is now superseded by Spring Boot 3 official native support, see the related reference documentation for more details.

As a consequence, I am closing this issue, and recommend trying your use case with latest Spring Boot 3 version. If you still experience the issue reported here, please open an issue directly on the related Spring project (Spring Framework, Data, Security, Boot, Cloud, etc.) with a reproducer.

Thanks for your contribution on the experimental Spring Native project, we hope you will enjoy the official native support introduced by Spring Boot 3.

sdeleuze avatar Jan 02 '23 11:01 sdeleuze