spring cloud學習(三)使用Ribbon實現客戶端負載均衡

使用Ribbon實現客戶端的負載均衡

* 我的博客空間 : https://zggdczfr.cn/ *java

Ribbon

Spring Cloud Netflix Ribbon 是一個客戶端負載均衡的組件。git

Ribbon的特色github

  • 和Eureka完美整合spring

  • 支持多種協議-HTTP,TCP,UDP緩存

  • 緩存/批處理服務器

  • built in failure resiliencyapp

具體請查看官方文檔 : https://github.com/Netflix/ribbon/wiki負載均衡

整合Ribbon實現客戶端的負載均衡

前期準備

這裏用到了上次的兩個demo(服務註冊中心和服務提供者)。
首先,添加服務提供者的服務,這裏我將其端口號打印出來可以更加直觀地觀察到負載均衡的實現:微服務

@RestController
public class PrintfController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("/service")
    public String printf(){
        System.out.println("服務消費者正在使用服務,端口號爲 : "+port);
        return "success";
    }
}

 

接下來分別啓動這兩個工程,注意將服務提供者的端口號(原來爲1111改成1112)修改後再啓動一次.就整個項目而言,總共有三個微服務再運行着(一個註冊中心,兩個服務提供者)。PS:其實服務提供者你想弄多少都行。工具

建立服務消費者

像一個普通的 spring cloud 工程同樣,建立後向註冊中心註冊本身的信息。
添加依賴:

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

 添加消費調用接口:
這裏涉及到一個類LoadBalancerClient,這個就是由 Netflix Ribbon 提供的工具類。他會根據 ServiceId (配置文件中的Service Name)向 Eureka (註冊服務器)獲取服務地址。

@RestController
public class ConsumerController {

    @Autowired
    private LoadBalancerClient client;

    @RequestMapping("/test")
    public String test(){
        ServiceInstance instance = client.choose("service");
        URI uri = instance.getUri();
        System.out.println(uri);
        return (new RestTemplate()).getForObject(uri+"/service",String.class);
    }
}

 配置文件信息:

# eureka client 配置
spring.application.name=ribbon-consumer
server.port=2222
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

 

注意:LoadBalancerClient返回的是已經註冊的服務器地址。

啓動服務消費者

啓動工程後,咱們能夠看到以下注冊信息:

這裏寫圖片描述

Ribbon 實現負載均衡

屢次訪問 http://localhost:2222/test ,並查看控制檯信息:
這裏寫圖片描述

這樣子,就實現了客戶端的負載均衡了~

相關文章
相關標籤/搜索