spring-cloud(2)【Ribbon】

1. Ribbon简介

Ribbon是一个客户端的负载均衡器。
Ribbon是Netflix发布的负载均衡器。给他配置服务提供者的地址列表后,Ribbon就可基于某种负载均衡算法,自动的帮助服务消费者去请求。
Ribbon默认提供了很多的负载均衡算法,例如轮询,随机等。当然也可以自定义算法。
在springCloud中,当Ribbon和Eureka配合使用事,Ribbon可自动从rureka中获取服务提供者的地址列表,并基于负载均衡算法,请求其中一个。

2. 整合Ribbon

1. 添加依赖

spring-cloud-starter-ribbon
spring-coud-starter-eureka已经包含了ribbon依赖

2. 为RestTemolate添加@LoadBalanced注解

@Bean
	@LoadBalanced
	public RestTemplate getRestTemp() {
		return new RestTemplate();
	}

3. 使用RestTemplate

rest.getForObject("http://server-user/user/"+id, String.class);
注意:server-user是用户微服务的虚拟主机名,当ribbon和eureka配合使用时,会自动将虚拟主机名映射成微服务的网络地址。
虚拟主机名不能包含“_”之类的字符,否则在ribbon调用时会报异常

4. 查看当前使用的节点



不能将restTemplate.getForObject(...)与loadBalancerClient.choose(...)写在一个方法中,两者之间会有冲突,因为此时代码中的resttemplate其实就是一个ribbon客户端,本身已经包含了choose行为。

3.自定义Ribbon配置

1. 代码自定义ribbon客户端

@Configuration
@RibbonClient(name = "server-user", configuration = FooConfiguration.class)
public class TestConfiguration {
}


FooConfiguration必须是@Configuration,但请注意,它不在主应用程序上下文的@ComponentScan中,否则将由所有@RibbonClients共享。如果您使用@ComponentScan(或@SpringBootApplication),则需要采取措施避免包含(例如将其放在一个单独的,不重叠的包中,或者指定要在@ComponentScan

Spring Cloud Netflix默认情况下为Ribbon(BeanType beanName:ClassName)提供以下bean:

  • IClientConfig ribbonClientConfig:DefaultClientConfigImpl

  • IRule ribbonRule:ZoneAvoidanceRule

  • IPing ribbonPing:NoOpPing

  • ServerList<Server> ribbonServerList:ConfigurationBasedServerList

  • ServerListFilter<Server> ribbonServerListFilter:ZonePreferenceServerListFilter

  • ILoadBalancer ribbonLoadBalancer:ZoneAwareLoadBalancer

  • ServerListUpdater ribbonServerListUpdater:PollingServerListUpdater

创建一个类型的bean并将其放置在@RibbonClient配置(例如上面的FooConfiguration)中)允许您覆盖所描述的每个bean。例:

@Configuration
public class FooConfiguration {
    @Bean
    public IPing ribbonPing(IClientConfig config) {
        return new PingUrl();
    }
}

这用PingUrl代替NoOpPing


2. 属性自定义ribbon客户端

支持的属性如下所示,应以<clientName>.ribbon.为前缀:

  • NFLoadBalancerClassName:应实施ILoadBalancer

  • NFLoadBalancerRuleClassName:应实施IRule

  • NFLoadBalancerPingClassName:应实施IPing

  • NIWSServerListClassName:应实施ServerList

  • NIWSServerListFilterClassName应实施ServerListFilter

注意
在这些属性中定义的类优先于使用@RibbonClient(configuration=MyRibbonConfig.class)定义的bean和由Spring Cloud Netflix提供的默认值。

server-users:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule


4. 脱离eureka使用Ribbon


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值