Spring Cloud负载均衡,报错:No instances available for localhost

在Spring Cloud实现Ribbon负载均衡项目中,出现报错:No instances available for localhost,如下:

java.lang.IllegalStateException: Request URI does not contain a valid hostname: http://CHENYL_PROVIDER/getAll
	at org.springframework.util.Assert.state(Assert.java:73) ~[spring-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:56) ~[spring-cloud-commons-2.1.1.RELEASE.jar:2.1.1.RELEASE]
	at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:92) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:76) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:670) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:311) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.my_consumer.controller.MyController.getAllFromProvider(MyController.java:20) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_11]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_11]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_11]
	at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_11]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) ~[spring-webmvc-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200) ~[tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-embed-core-9.0.17.jar:9.0.17]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) [tomcat-embed-core-9.0.17.jar:9.0.17]

服务提供者的配置文件:

spring:
  datasource:
    username: root
    password: sj18927073362
    url: jdbc:mysql://localhost:3306/chenyl?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: chenyl_provider


mybatis:
  type-aliases-package: com.my_provider.pojo
  mapper-locations: classpath:mapper/*.xml

server:
  port: 8001


# Eureka配置:配置服务注册中心地址
eureka:
  instance:
    instance-id: chenyl
    hostname: localhost
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7002/eureka/,http://localhost:7001/eureka/

info:
  app.name: chenyl-springcloud
  company.name: 中国秀儿

服务消费者的配置文件:

# Eureka配置:配置服务注册中心地址
eureka:
  instance:
    instance-id: chenyl
    hostname: localhost
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:7002/eureka/,http://localhost:7001/eureka/

info:
  app.name: chenyl-springcloud
  company.name: 中国秀儿

服务消费者的配置类

@Configuration
public class RestConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

服务消费者的接口

@RestController
public class MyController {

    @Autowired
    RestTemplate restTemplate;

    private static final String REST_URL_PREFIX = "http://localhost:8001";

    @RequestMapping("/cGet")
    public Object getAllFromProvider(){
        List object = restTemplate.getForObject(REST_URL_PREFIX + "/getAll", List.class);
        return object;
    }
}

在运行的时候就出现了No instances available for localhost报错,通过研究发现原因在于配置类的注解:@LoadBalanced
加上这个注解以后就应该用服务名去访问了而不是用ip地址,毕竟是多台服务器负载均衡嘛,用IP地址访问的话就没有意义了。于是我把访问的URL前缀改成:

private static final String REST_URL_PREFIX = "http://CHENYL_PROVIDER";

但却出现了这样的错误:Request URI does not contain a valid hostname: http://CHENYL_PROVIDER。这又是一个坑。
上网查了下资料发现原因竟然是:服务名不能带下划线,不然无法解析具体的地址

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
An active internet connection Java 8+ Docker Maven Git client Chapter 1, Introduction to Microservices, will introduce you to the microservices architecture, cloud environment, etc. You will learn the difference between a microservice based application and a monolith application while also learning how to migrate to a microservices application. Chapter 2, Spring for Microservices, will introduce you Spring Boot framework. You will learn how to effictively use it to create microservice application. We will cover such topics like creating REST API using Spring MVC annotations, providing API documentation using Swagger2, and exposing health checks and metrics using Spring Boot Actuator endpoints. Chapter 3, Spring Cloud Overview, will provide a short description of the main projects being a part of Spring Cloud. It will focus on describing the main patterns implemented by Spring Cloud and assigning them to the particular projects. Chapter 4, Service Discovery, will describe a service discovery pattern with Spring Cloud Netflix Eureka. You will learn how to run Eureka server in standalone mode and how to run multiple server instances with peer-to-peer replication. You will also learn how to enable discovery on the client side and register these clients in different zones. Chapter 5, Distributed Configuration with Spring Cloud Config, will describe how use distributed configuration with Spring Cloud Config in your applications. You will learn how to enable different backend repositories of property sources and push change notifications using Spring Cloud Bus. We will compare discovery first bootstrap and config first bootstrap approaches to illustrate integration between discovery service and configuration server. Chapter 6, Communication Between Microservices, will describe the most important elements taking a part in an inter-service communication: HTTP clients and load balancers. You will learn how to use Spring RestTemplate, Ribbon, and Feign clients with or without
Table of Contents Title Page Copyright and Credits Mastering Spring Cloud Packt Upsell Why subscribe? PacktPub.com Contributors About the author About the reviewer Packt is searching for authors like you Preface Who this book is for What this book covers To get the most out of this book Download the example code files Conventions used Get in touch Reviews Introduction to Microservices The blessings of microservices Building microservices with Spring Framework Cloud-native development Learning the microservices architecture Understanding the need for service discovery Communication between services Failures and circuit breakers Summary Spring for Microservices Introducing Spring Boot Developing applications with Spring Boot Customizing configuration files Creating RESTful Web Services API Documentation Using Swagger 2 together with Spring Boot Testing API with Swagger UI Spring Boot Actuator features Application information Health information Metrics Developer tools Integrating application with database Building a sample application Running the application Summary Spring Cloud Overview Beginning with the basics Netflix OSS Service discovery with Eureka Routing with Zuul Load balancing with Ribbon Writing Java HTTP clients Latency and fault tolerance with Hystrix Configuration management with Archaius Discovery and distributed configuration An alternative – Consul Apache Zookeeper Miscellaneous projects Distributed tracing with Sleuth Messaging and integration Cloud platform support Other useful libraries Security Automated testing Cluster features Projects overview  Release trains Summary Service Discovery Running Eureka on the server side Enabling Eureka on the client side Deregistration on shutdown Using discovery client programmatically Advanced configuration settings Refreshing the registry Changing the instance identificator  Preferring the IP address Response cache Enabling secure communication between client and server Registering a secure service Eureka API Replication and high availability Architecture of the sample solution Building the example application Failover Zones Zones with a standalone server Building an example application Summary Distributed Configuration with Spring Cloud Config Introduction to HTTP API resources Native profile support Building a server-side application Building a client-side application Adding a Eureka Server Client-side bootstrap approaches Config Server discovery Repository backend types Filesystem backend Git backend Different protocols Using placeholders in URIs Building a server application Client-side configuration Multiple repositories Vault backend Getting started with Vault Integration with Spring Cloud Config Client-side configuration Additional features Fail on start and retry Secure client Reload configuration automatically Solution architecture Reload configuration with @RefreshScope Consuming events from a message broker Monitoring repository changes on a Config Server Simulating change events manually Testing locally with a GitLab instance  Summary Communication Between Microservices Different styles of communication  Synchronous communication with Spring Cloud Load balancing with Ribbon Enabling communication between microservices using the Ribbon client Static load balancing configuration Calling other services Using RestTemplate together with service discovery Building example application Using Feign client Support for different zones Enabling Feign for an application Building Feign interfaces Launching microservices Inheritance support Creating a client manually Client customization Summary Advanced Load Balancing and Circuit Breakers Load balancing rules The WeightedResponseTime rule Introducing Hoverfly for testing Testing the rule Customizing the Ribbon client The circuit breaker pattern with Hystrix Building an application with Hystrix Implementing Hystrix's commands Implementing fallback with cached data The tripping circuit breaker Monitoring latency and fault tolerance Exposing Hystrix's metrics stream Hystrix dashboard Building an application with the dashboard Monitoring metrics on the dashboard Aggregating Hystrix's streams with Turbine Enabling Turbine Enabling Turbine with streaming Failures and the circuit breaker pattern with Feign Retrying the connection with Ribbon Hystrix's support for Feign Summary Routing and Filtering with API Gateway Using Spring Cloud Netflix Zuul Building a gateway application Integration with service discovery Customizing route configuration Ignoring registered services Explicity set service name  Route definition with the Ribbon client Adding a prefix to the path Connection settings and timeouts Secure headers Management endpoints Providing Hystrix fallback Zuul filters Predefined filters Custom implementations Using Spring Cloud Gateway Enable Spring Cloud Gateway for a project Built-in predicates and filters Gateway for microservices Integration with service discovery Summary Distributed Logging and Tracing Best logging practices for microservices Logging with Spring Boot Centralizing logs with ELK Stack Setting up ELK Stack on the machine Integrating an application with ELK Stack Using LogstashTCPAppender Using AMQP appender and a message broker Spring Cloud Sleuth Integrating Sleuth with an application Searching events using Kibana Integrating Sleuth with Zipkin Running the Zipkin server Building the client application Analyze data with the Zipkin UI Integration via message broker Summary Additional Configuration and Discovery Features Using Spring Cloud Consul Running Consul agent Integration on the client side Service discovery Health check Zones Client settings customization Running in clustered mode Distributed configuration Managing properties in Consul Client customization Watching configuration changes Using Spring Cloud Zookeeper Running Zookeeper Service discovery Client implementation Zookeeper dependencies Distributed configuration Summary Message-Driven Microservices Learning about Spring Cloud Stream Building a messaging system Enabling Spring Cloud Stream Declaring and binding channels Customizing connectivity with the RabbitMQ broker Integration with other Spring Cloud projects The publish/subscribe model Running a sample system Scaling and grouping Running multiple instances Consumer groups Partitioning Configuration options Spring Cloud Stream properties Binding properties The consumer The producer The advanced programming model Producing messages Transformation Consuming messages conditionally Using Apache Kafka Running Kafka Customizing application settings Kafka Streams API support Configuration properties Multiple binders Summary Securing an API Enabling HTTPS for Spring Boot Secure discovery Registering a secure application Serving Eureka over HTTPS Keystore generation Configurating SSL for microservices and Eureka server Secure configuration server Encryption and decryption Configuring authentication for a client and a server Authorization with OAuth2 Introduction to OAuth2 Building an authorization server Client configuration Using the JDBC backend store Inter-service authorization Enabling SSO on the API gateway Summary Testing Java Microservices Testing strategies Testing Spring Boot applications Building the sample application Integration with the database Unit tests Component tests Running tests with an in-memory database Handling HTTP clients and service discovery Implementing sample tests Integration tests Categorizing tests Capturing HTTP traffic Contract tests Using Pact Consumer side Producer side Using Spring Cloud Contract Defining contracts and generating stubs Verifying a contract on the consumer side Scenarios Performance testing Gatling Enabling Gatling Defining the test scenario Running a test scenario Summary Docker Support Introducing Docker Installing Docker Commonly used Docker commands Running and stopping a container Listing and removing containers Pulling and pushing images Building an image Networking Creating a Docker image with microservices Dockerfiles Running containerized microservices Building an image using the Maven plugin Advanced Docker images Continuous Delivery Integrating Jenkins with Docker Building pipelines Working with Kubernetes Concepts and components Running Kubernetes locally via Minikube Deploying an application Maintaining a cluster Summary Spring Microservices on Cloud Platforms Pivotal Cloud Foundry Usage models Preparing the application Deploying the application Using CLI Binding to services Using the Maven plugin Maintenance Accessing deployment details Managing application life cycles Scaling Provisioning brokered services The Heroku platform Deployment methods Using the CLI Connecting to the GitHub repository Docker Container Registry Preparing an application Testing deployments Summary

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值