SpringCloud 自定义Ribbon客户端
您可以使用<client>.ribbon.*
中的外部属性来配置Ribbon客户端的某些位,这与本地使用Netflix API相似,不同之处在于可以使用Spring Boot配置文件。可以将本机选项检查为CommonClientConfigKey
(功能区核心的一部分)中的静态字段。
Spring Cloud还允许您通过使用@RibbonClient
声明其他配置(在RibbonClientConfiguration
之上)来完全控制客户端,如以下示例所示:
@Configuration @RibbonClient(name = "custom", configuration = CustomConfiguration.class) public class TestConfiguration { }
在这种情况下,客户端由RibbonClientConfiguration
中已有的组件以及CustomConfiguration
中的任何组件组成(其中后者通常会覆盖前者)。
CustomConfiguration
类必须是@Configuration
类,但请注意,对于主应用程序上下文,它不在@ComponentScan
中。否则,它由所有@RibbonClients
共享。如果您使用@ComponentScan
(或@SpringBootApplication
),则需要采取措施避免将其包括在内(例如,可以将其放在单独的,不重叠的程序包中,或指定要在@ComponentScan
)。
下表显示了Spring Cloud Netflix默认为Ribbon提供的beans:
Bean类型 | Bean名称 | 班级名称 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
创建其中一种类型的bean并将其放置在@RibbonClient
配置中(例如上述FooConfiguration
),您可以覆盖所描述的每个beans,如以下示例所示:
@Configuration protected static class FooConfiguration { @Bean public ZonePreferenceServerListFilter serverListFilter() { ZonePreferenceServerListFilter filter = new ZonePreferenceServerListFilter(); filter.setZone("myTestZone"); return filter; } @Bean public IPing ribbonPing() { return new PingUrl(); } }
上一示例中的include语句将NoOpPing
替换为PingUrl
,并提供了自定义serverListFilter
。
更多建议: