spring cloud ribbon调用服务

Ribbon

Ribbon主要负责负载均衡调用,是基于Netflix Ribbon实现的一套客户端。主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon会自动的帮助你基于某种规则去连这些机器。

简单来说 ribbon = 负载均衡 + restTemplate

一、Ribbon本地负载均衡 与 Nginx服务端负载均衡 区别

Nginx是服务器负载均衡,集中式负载均衡,客户端的所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。

Ribbon本地负载均衡,进行内负载均衡,在调用为服务接口的时候,会在注册中心上获取信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

二、Ribbon工作步骤

Ribbon在工作时分成两步:

  • 第一步先选择EurekaServer,它优先选择在同一个区域内负载较少的server
  • 第二部再根据用户指定的策略,从server取到的服务注册列表中选择一个地址。

Ribbon就是一个软负载均衡的客户端组件,它可以和其他所需请求的客户端结合使用,和eureka结合只是其中的一个实例。

三、Ribbon调用服务

3.1、设置服务端集群:

eureka-client、eureka-client2

eureka-client2就是 eureka-client的复制版,注意端口号要更改。

在eureka-client中编写controller,用于服务调用测试。

@RestController
public class ClientController {
    @Value("${server.port}")
    private String port;

    @ResponseBody
    @RequestMapping("/port")
    public String getPort(){
        return port;
    }
}

3.2、客户端

3.2.1、编写配置类

@Configuration
public class ApplicationContextConfig {

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

3.2.2、编写controller

@RestController
public class ConsumerController {

    @Resource
    private RestTemplate restTemplate;

    private static final String URL = "http://EUREKA-CLIENT";

    @RequestMapping("/consumer/port")
    @ResponseBody
    public String getPort() {
        return restTemplate.getForObject(URL + "/port", String.class);
    }
}

4、测试

启动eureka-server、eureka-client、eureka-client2、eureka-consumer。

访问localhost:8001/port进行自测。

访问localhost:8002/port进行自测。

自测成功后,不停访问localhost:7001/consumer/port。


发现端口号会变更,说明Ribbon负载均衡已生效。

原文地址:https://www.cnblogs.com/Zzwena/p/12540103.html