`
raymond.chen
  • 浏览: 1436921 次
  • 性别: 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

 

分享到:
评论

相关推荐

    SpringCloud服务消费者(Ribbon+Feign)原理及示例

    本文主要探讨了在SpringCloud中如何使用Ribbon和Feign作为服务消费者的组件,以及它们背后的负载均衡原理。首先,理解服务间通信的基础是HTTP协议,而注册中心Eureka则负责维护服务实例的列表。 Ribbon和Feign都是...

    springcloud+eureka+ribbon多服务负载均衡

    3. 创建RestTemplate或FeignClient实例,指定要调用的服务名,Ribbon会自动在后台处理负载均衡。 4. 当发起请求时,Ribbon会根据配置的负载均衡策略选取一个服务实例进行调用。 例如,使用Ribbon的轮询策略,每次...

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

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

    网关Gateway+自定义路由过滤

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

    spring boot ribbon-consumer工程:使用Ribbon实现的消费者服务

    在本项目"spring boot ribbon-consumer"中,我们将探讨如何使用Ribbon作为客户端负载均衡器来实现微服务架构中的消费者服务。Ribbon是Netflix开源的一套客户端负载均衡工具,它可以与Eureka、Zookeeper等服务发现...

    springcloud+eureka+ribbon整合

    4. **配置Ribbon**: 在需要调用其他服务的微服务中,引入Ribbon配置,并在RestTemplate或Feign配置中指定Ribbon的负载均衡策略。 5. **实现服务调用**: 使用配置好的RestTemplate或Feign客户端,通过服务ID调用其他...

    《深入理解Spring Cloud与微服务构建》学习笔记(十一)~使用RestTemplate和Ribbo消费服务

    在本篇学习笔记中,我们将深入探讨如何在Spring Cloud框架下使用RestTemplate和Ribbon来消费服务。Spring Cloud是基于Spring Boot实现的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、...

    Spring Cloud基于Spring Boot实现的微服务框架,实现微服务架构所需的组件.docx

    - 使用Ribbon + restTemplate 或 Feign 来调用服务提供者的接口。 通过这种方式,Spring Cloud 构建的微服务框架可以实现服务的发现、注册、调用以及负载均衡,从而构建出一个高度可扩展和容错的分布式系统。此外...

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

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

    SpringCloud-创建服务消费者-Ribbon方式示例代码.zip

    5. **使用RestTemplate或Feign**:Spring Cloud提供了`RestTemplate`增强版,内置了Ribbon的支持,可以直接用来调用服务提供者。另外,Feign是声明式的HTTP客户端,也可以和Ribbon结合使用,提供更简洁的接口调用...

    3.Ribbon服务消费者

    【Ribbon服务消费者】 在Spring Cloud的生态系统中,Ribbon是作为Netflix的子项目出现,主要功能在于提供客户端的负载均衡器。它被设计用于在微服务架构中,当一个服务需要调用其他服务时,确保请求能均匀分布到...

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

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

    spring cloud ribbon方式使用服务

    在实际使用Spring Cloud Ribbon时,我们需要在配置文件中指定服务实例的ID(服务名),然后在需要调用远程服务的地方注入`IRestTemplate`或`LoadBalancerClient`,通过它们来发起请求。`IRestTemplate`是基于HTTP的...

    ribbon的基础使用

    5. **使用RestTemplate或Feign**:在服务消费者中,我们可以使用Spring的`RestTemplate`或者Feign来发起对服务提供者的请求。Ribbon会自动注入负载均衡器,根据设定的策略选择服务实例。 6. **服务调用**:在发起...

    Spring Boot使用RestTemplate消费REST服务的几个问题记录

    "Spring Boot使用RestTemplate消费REST服务的几个问题记录" 本文主要介绍了Spring Boot使用RestTemplate消费REST服务的几个问题记录,记录了在使用RestTemplate调用REST服务时遇到的问题和解决方案。下面是相关知识...

    spring cloud Ribbon使用详细例子

    - 创建服务消费者(Consumer),配置Ribbon,使用@LoadBalanced RestTemplate或Feign调用Provider的服务。 - 编写测试代码,验证负载均衡的效果,如轮询调用多个服务实例。 7. **Ribbon扩展** - **Hystrix断路器...

    Ribbon学习讲义大全.pdf

    总的来说,Ribbon作为Spring Cloud生态的一部分,为服务消费者提供了强大的负载均衡功能,简化了微服务架构中的服务间通信。通过与RestTemplate或其他客户端库的结合,Ribbon能够在保持代码简洁的同时,实现高效的、...

    springcloud-ribbon负载均衡demo

    4. 服务消费者的业务逻辑:可能包含`RestTemplate`或`FeignClient`的使用,它们会在Ribbon的辅助下,自动进行负载均衡的HTTP请求。 在`https://blog.csdn.net/zhizhuodewo6/article/details/81905865`这篇文章中,...

    SpringCloud案例(集成了Eureka、Ribbon)

    2. 使用Ribbon客户端:通过`@LoadBalanced`注解修饰RestTemplate或Feign客户端,Ribbon会自动在每次请求时选择一个可用的服务实例。 3. 自定义负载策略:Ribbon提供了多种负载均衡策略,如轮询、随机、最少连接数等...

    springcloud-model之eureka+Ribbon.zip

    1. **服务列表获取**:客户端(使用Ribbon的服务消费者)首先从Eureka获取到目标服务的所有实例列表。 2. **负载策略选择**:Ribbon内置了多种负载均衡策略,如轮询(Round Robin)、随机(Random)、最短响应时间...

Global site tag (gtag.js) - Google Analytics