springCloud(7):Ribbon实现客户端侧负载均衡-消费者整合Ribbon

一、简介

Ribbon是Netfix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等,当然,也可以为Ribbon实现自定义的负载均衡算法。

在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。

二、为服务消费者整合Ribbon

2.1、引入ribbon依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

2.2、为RestTemplate添加@LoadBalanced注解(Application)

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

2.3、调用其它微服务

@GetMapping("/user/{id}")
public User findById(@PathVariable Long id) throws Exception {
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("spring-ribbon-eureka-client2");
    // 打印当前选择的是哪个节点
    System.out.println("serviceId : " + serviceInstance.getServiceId());
    System.out.println("hoost : " + serviceInstance.getHost());
    System.out.println("port : " + serviceInstance.getPort());
    System.out.println("============================================================");

    if (null == id) {
        return null;
    }
    return  this.restTemplate.getForObject("http://spring-ribbon-eureka-client2/" + id, User.class);
}

说明:

1、spring-ribbon-eureka-client2是服务提供者注册到Eureka Server上的应用名称

2、本次测试开启了两个spring-ribbon-eureka-client2服务提供者,一个端口是8080,一个是8083

2.4、测试

访问:http://192.168.1.83:8082/user/1

效果:

时间: 2024-10-12 13:05:40

springCloud(7):Ribbon实现客户端侧负载均衡-消费者整合Ribbon的相关文章

springCloud(8):Ribbon实现客户端侧负载均衡-自定义Ribbon配置

一.简介 很多场景下,可能根据需要自定义的Ribbon的配置,例如修改Ribbon的负载均衡规则等.Spring cloud Camden允许使用Java代码或属性自定义Ribbon的配置. 二.使用Java代码自定义Ribbon配置 在Spring cloud中,Ribbon的默认配置如下,格式是:BeanType beanName:ClassName 1.IClientConfig ribbonClientConfig:DefaultClientConfigImpl 2.IRule ribb

SpringCloud(2) 客户端的负载均衡Ribbon

和Nginx不同,Ribbon是客户端的负载均衡,Nginx是服务端的负载均衡 创建ribbon的demo项目 首先加入ribbon依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.0.RELEASE</version>&

Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡

接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763.然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务.这两个Hello world都注册到了eureka服务中心.这时候再访问http://localhost:8761, 可以看到两个hello world服务已经注册.(服务与注册参见Spr

SpringCloud系列五:Ribbon 负载均衡(Ribbon 基本使用、Ribbon 负载均衡、自定义 Ribbon 配置、禁用 Eureka 实现 Ribbon 调用)

1.概念:Ribbon 负载均衡 2.具体内容 现在所有的服务已经通过了 Eureka 进行了注册,那么使用 Eureka 注册的目的是希望所有的服务都统一归属到 Eureka 之中进 行处理,但是现在的问题,所有的微服务汇集到了 Eureka 之中,而客户端的调用也应该通过 Eureka 完成.而这种调用就可以利用 Ribbon 技术来实现. Ribbon 是一个服务调用的组件,并且是一个客户端实现负载均衡处理的组件.服务器端实现负载均衡可以使用 Nginx. HAProxy.LVS 等. 2

Spring Cloud Ribbon源码分析---负载均衡实现

上一篇结合 Eureka 和 Ribbon 搭建了服务注册中心,利用Ribbon实现了可配置负载均衡的服务调用.这一篇我们来分析Ribbon实现负载均衡的过程. 从 @LoadBalanced入手 还记得前面配置 RestTemplate: @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } 在消费端使用Spring 提供的 RestTemplate 来发出请求,而Ribbon 在 Rest

Exchange Server 2013 LAB Part 9.客户端访问服务器负载均衡

Exchange 2013客户端访问服务器负载均衡 在Exchange2013中,负载均衡体系发生了更改.其中的客户端访问服务器阵列在Exchange 2013中不再需要配置,而是只需要通过网络负载均衡器来实现流量负载和转移故障.也就是说,为了简化客户端访问服务器的负载和可用性,不再使用访问阵列. 关于Exchange2010客户端访问服务器阵列的详细介绍请阅读Exchange 2010系列:http://xutonglin.blog.51cto.com/8549515/1394911 1.安装

Spring Cloud Ribbon 源码分析---负载均衡算法

上一篇分析了Ribbon如何发送出去一个自带负载均衡效果的HTTP请求,本节就重点分析各个算法都是如何实现. 负载均衡整体是从IRule进去的: public interface IRule{ /* * choose one alive server from lb.allServers or * lb.upServers according to key * * @return choosen Server object. NULL is returned if none * server i

在IDEA上使用springcloud构建多节点的服务提供者负载均衡

负载均衡(结合<在IDEA上使用springcloud构建单节点的服务提供者>) 以上面spring-cloud-producer为例子修改,将其中的controller改动如下: @RestController public class HelloController { @RequestMapping("/hello") public String index(@RequestParam String name) { return "hello "+

ribbon源码之负载均衡算法

IRule 负载均衡器用来选择服务器的规则. public interface IRule{ public Server choose(Object key); public void setLoadBalancer(ILoadBalancer lb); public ILoadBalancer getLoadBalancer(); } 通过BaseLoadBalancer的setRule或构造函数来为BaseLoadBalancer添加IRule public void setRule(IRu