Ribbon是一个客户端负载均衡器,它提供了对HTTP和TCP客户端的行为的大量控制。Feign已经在使用Ribbon了,所以如果你在使用@FeignClient,那么这个部分也适用。
Ribbon中的一个核心概念是命名客户端。每个负载均衡器都是组件集合的一部分,这些组件一起工作,根据需要联系远程服务器,集成有一个名称,作为应用程序开发人员使用(比如:使用@FeignClient注解)。Spring Cloud使用RibbonClientConfiguration根据需要为每个命名客户端创建一个新的集成作为ApplicationContext。其中包括一个ILoadBalancer、一个RestClient和一个ServerListFilter。
怎样引入Ribbon
项目中引入Ribbon,通过starter使用group org.springframework.cloud
and artifact id spring-cloud-starter-netflix-ribbon
.
定制Ribbon客户端
您可以使用<client>.ribbon.*中的外部属性配置Ribbon客户机的一些位。除了可以使用Spring Boot configuration files之外,这与本地使用Netflix api没有什么不同。可以在CommonClientConfigKey(ribbon-core的一部分)中将本机选项检查为静态字段。
Spring Cloud还允许您使用@RibbonClient声明额外的配置(在RibbonClientConfiguration之上),从而完全控制客户端。例子:
@Configuration @RibbonClient(name = "foo", configuration = FooConfiguration.class) public class TestConfiguration { }
在这种情况下,客户端是由RibbonClientConfiguration中已经存在的组件以及FooConfiguration中的任何组件组成的(后者通常会覆盖前者)。
FooConfiguration必须是@Configuration,但是要注意它不是在用于主应用程序上下文的@ComponentScan中,否则它将被所有@RibbonClients共享。如果您使用@ComponentScan(或@SpringBootApplication),您需要采取步骤来避免包含它(例如,将它放在一个单独的、不重叠的包中,或者指定在@ComponentScan中显式扫描的包)。Spring Cloud Netflix默认为ribbon提供了以下bean (BeanType beanName: ClassName):
IClientConfig
ribbonClientConfig:DefaultClientConfigImpl
IRule
ribbonRule:ZoneAvoidanceRule
IPing
ribbonPing:DummyPing
ServerList<Server>
ribbonServerList:ConfigurationBasedServerList
ServerListFilter<Server>
ribbonServerListFilter:ZonePreferenceServe