Dav*_*vid 0 spring-cloud spring-cloud-feign netflix-ribbon spring-cloud-netflix
1.5.13.RELEASEEdgware.SR3 我的配置中的一些相关属性:
feign.hystrix.enabled=true
eureka.client.fetch-registry=true
spring.cloud.service-registry.auto-registration.enabled=true
service1.ribbon.listOfServers=https://www.google.com
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序,可以使用伪装客户端与其他3种服务进行通信。其中的两个是通过Eureka服务发现而发现的。这些运作良好。最终服务是具有单个静态主机名的外部服务,我不希望通过Eureka解决此问题。由于我确实希望Eureka可以使用其中的两项服务,因此我希望启用Eureka。
对于最终服务,我尝试将添加service1.ribbon.listOfServers=https://www.google.com到中application.properties,但是在调用伪客户端时在运行时会遇到以下错误:
路径为[]的Servlet [dispatcherServlet]的Servlet.service()引发异常[请求处理失败;嵌套的异常是com.netflix.hystrix.exception.HystrixRuntimeException:Service1Client#test()失败,并且没有可用的备用。定价_1 | com.netflix.client.ClientException:负载均衡器没有可供客户端使用的服务器:service1Price_1 | 在com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483)〜[ribbon-loadbalancer-2.2.5.jar!/:2.2.5]
我的客户端配置如下:
@FeignClient("service1")
public interface Service1Client {
@GetMapping(value = "/")
String test();
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的任何建议。
根据我所了解的功能区的精神,它是充当客户端负载平衡器,在我的情况下,没有任何负载平衡(我有一个固定的静态主机名,该主机名在DNS中返回单个A记录)。Ribbon实际上感觉像是一个不必要的组件-我真正想要的是Feign客户端,因为我喜欢这样一个事实,即它抽象了较低级别的HTTP请求和对象序列化。因此,我想一个替代的后续问题是,我可以在没有功能区的情况下使用伪装-似乎开箱即用的好行为是使用功能区-甚至@FeignClient注释的Javadoc 都说:
如果功能区可用,它将用于对后端请求进行负载均衡,并且可以使用
@RibbonClient与假客户端相同名称(即值)的来配置负载均衡器。
这表明即使两者服务于不同的目的,两者也具有密切的联系。
如您所述,有两种方法可以解决您的问题。
使用功能区无功能区
如果url在@FeignClient注释中指定属性,则如下所示,功能区将不使用功能区即可使用。
@FeignClient(name = "service1", url = http://www.google.com)
public interface Service1Client {
@GetMapping(value = "/")
String test();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的另外两个Feign客户仍然可以使用Ribbon和Eureka。
与丝带一起使用假装而没有尤里卡
您缺少的是配置NIWSServerListClassName。它的默认值为com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList,它将使用Eureka检索服务器列表。如果设置NIWSServerListClassName到ConfigurationBasedServerList一个带状的客户端(客户端假死),只有该客户端将与listOfServers列表而不从尤里卡获取服务器列表。其他假冒客户仍将与Eureka合作。
service1:
ribbon:
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
listOfServers: http://www.google.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |