`
raymond.chen
  • 浏览: 1418122 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Ribbon+RestTemplate消费服务

 
阅读更多

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。

 

主要包括六个组件:

         1、ServerList,负载均衡使用的服务器列表。这个列表会缓存在负载均衡器中,并定期更新。当 Ribbon 与 Eureka 结合使用时,ServerList 的实现类就是 DiscoveryEnabledNIWSServerList,它会保存 Eureka Server 中注册的服务实例表。

         2、ServerListFilter,服务器列表过滤器。这是一个接口,主要用于对 Service Consumer 获取到的服务器列表进行预过滤,过滤的结果也是 ServerList。Ribbon 提供了多种过滤器的实现。

         3、IPing,探测服务实例是否存活的策略。

         4、IRule,负载均衡策略,其实现类表述的策略包括:轮询、随机、根据响应时间加权等。

         5、ILoadBalancer,负载均衡器。这也是一个接口,Ribbon 为其提供了多个实现,比如 ZoneAwareLoadBalancer。而上层代码通过调用其 API 进行服务调用的负载均衡选择。

         6、RestClient,服务调用器。

 

主要负载均衡策略:

         1、com.netflix.loadbalancer.RoundRobinRule:轮询,这是默认的策略。

         2、com.netflix.loadbalancer.RandomRule:随机

         3、com.netflix.loadbalancer.RetryRule:对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择一个可用的server

         4、com.netflix.loadbalancer.WeightedResponseTimeRule:加权响应时间。根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。

         5、com.netflix.loadbalancer.ZoneAvoidanceRule:区域感知轮询。复合判断server所在区域的性能和server的可用性选择server

         6、com.netflix.loadbalancer.AvailabilityFilteringRule:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server。

         7、com.netflix.loadbalancer.BestAvailableRule:选择一个最小的并发请求的server,逐个考察Server,如果Server被tripped了,则忽略

 

 启动类:

@EnableEurekaClient
// @RibbonClient(name="service-provider-1", configuration=DefaultRibbonConfiguration.class)
@SpringBootApplication
public class Main {
	@Bean
	@LoadBalanced //添加负载均衡支持,默认策略是轮询
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

	public static void main(String[] args) {
		SpringApplication.run(Main.class, args);
	}
}

 

Controller类:

@RestController
public class UserController {
	@Autowired
    private RestTemplate restTemplate;
	
	@GetMapping("/user/{id}")
	public String addUser(@PathVariable Long id){
		//服务提供者的接口地址:此处用 spring.application.name 属性值
		String url = "http://service-provider-1/user/" + id;
		
		//通过RestTemplate对象调用接口
		String result = restTemplate.getForObject(url, String.class);
		
		return result;
	}
}

 

通过自定义Ribbon更改默认的负载均衡策略,有以下两种方式:

1、通过代码自定义Ribbon

    创建Ribbon配置类

/**
 * 自定义Ribbon配置类
 * 
 * 该配置类不能被@ComponentScan扫描到,否则配置信息就会被所有 @RibbonClient 共享
 * Ribbon默认配置类是 RibbonClientConfiguration
 */
@Configuration
public class DefaultRibbonConfiguration {
	@Bean
	public IRule ribbonRule(){
		IRule rule = new RandomRule();
	    return rule;
	}
}
 

    在启动类中使用 @RibbonClient 或 @RibbonClients 注解为服务提供者指定Ribbon配置类

         @RibbonClient(name="service-provider-1", configuration=DefaultRibbonConfiguration.class)

 

 2、使用配置文件自定义Ribbon

        在application.properties文件中添加以下配置信息

service-provider-1.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

 

分享到:
评论

相关推荐

    Finn之 SpringCloud2.0教程全集(三)- 服务消费者(rest + ribbon)

    Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等...

    网关Gateway+自定义路由过滤

    :路由网关Gateway+自定义路由过滤【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。gateway是网关的...

    springcloud_test.zip

    springcloud入门demo,项目包括:注册中心、服务提供者、服务消费者、feign、ribbon+restTemplate

    服务的注册发现与消费方式2种【代码示例】

    springCloud学习【一】:服务的注册发现与消费【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。...

    服务熔断:Hystrix容错框架【包括之前章节Demo】

    :服务熔断:Hystrix容错框架【实例】,里面是完整的demo包,registry是注册中心模块,service是服务提供者,consume和consume-feign是消费服务的两种实现方式,consume是ribbon+restTemplate。解压完之后,配置好...

    SpringCloud之Ribbon负载均衡的入门操作

    是不是应用像dubbo那样,使用服务名进行调用呢?不然,我们使用注册中心有什么用呢?好的呢,我们先保留这个思考。来进入Ribbon的学习Ribbon[?r?b?n],是SpringCloudNetflix中的一个关于客户端的负载均衡插件。主要...

    新版本SpringCloud2学习手册

    服务消费者 11 高可用注册中心 14 Eureka高可用原理 14 Eureka集群环境搭建 14 Eureka详解 17 使用Eureka闭源了闭源了怎么办? 21 使用Consul来替换Eureka 21 使用Zookeeper来替换Eureka 25 Consistency...

    SpringCloud-Project:SpringCloud的注册中心和服务以及消费

    4 service-order-demo 消费者(使用ribbon显示开启负载均衡,在启动类中使用@LoadBalanced注解表明这个restRemplate开启负载均衡的功能) @Bean @LoadBalanced //注解表明这个restRemplate开启负载均衡的功能,是一...

    xd-springcloud

    服务消费方 xd-springcloud-consumer 采用Ribbon的均衡负载 RestTemplate @Bean @LoadBalanced public RestTemplate restTemplate(SimpleClientHttpRequestFactory factory){ return new RestTemplate(factory);...

Global site tag (gtag.js) - Google Analytics