日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud【Finchley】-04使用Ribbon实现客户端负载均衡

發布時間:2025/3/21 javascript 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud【Finchley】-04使用Ribbon实现客户端负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • Ribbon演示
    • 服務提供者微服務改造為使用MySql數據庫
    • 新建服務消費者微服務,配置Ribbon
    • 注意事項
  • 源碼

概述

Spring Cloud-03將微服務注冊到Eureka Server上 + 為Eureka Server添加用戶認證中遺留的問題還記得吧 ,對,服務消費者調用服務提供者是硬編碼的方式,雖然把地址配置到了application.yml中,但是一旦服務端的地址發生改變,那肯定是要修改配置文件的。

如何解決呢? Spring Cloud整合了Ribbon.

Ribbon是Nextflix發布的負載均衡器,為Ribbon配置服務提供者地址后,Ribbon就可以基于某種負載均衡的算法,自動幫助服務消費者請求。

Ribbon支持輪詢、隨機等負載均衡算法,當然也支持實現自定義的負載均衡算法。

在Spring Cloud中,當Ribbon和Eureka配合使用時,Ribbon可自動從Eureka Server獲取服務提供者的地址列表,并基于某種負載均衡算法,請求其中一個服務提供者實例。


Ribbon演示

服務提供者微服務改造為使用MySql數據庫

當然了,這一步不是必須的。

Step1 修改pom.xml增加mysql的依賴

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency>

Step2: applicaiton.yml中關于數據庫的部分調整為

spring:datasource:url: jdbc:mysql://localhost:3306/artisan?useUnicode=true&characterEncoding=utf-8&useSSL=trueusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver

新建服務消費者微服務,配置Ribbon

Step1: 在maven父工程上右鍵新建maven module ,名稱為:micorservice-consumer-movie-ribbon


Step2: pom.xml引入ribbon依賴

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

Step3: 為RestTemplate添加@LoadBalanced注解

只需要為RestTemplate添加@LoadBalanced注解,就可以為RestTemlate整合Ribbon,使其具備負載均衡的能力


Step4: 修改Controller層代碼,將地址調整為注冊在Eureka上的虛擬主機名

package com.artisan.microservice.controller;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;import com.artisan.microservice.model.User;import lombok.extern.slf4j.Slf4j;@RestController @Slf4j public class MovieController {@Autowiredprivate RestTemplate restTemplate;@AutowiredLoadBalancerClient loadBalancerClient;@GetMapping("/movie/{id}")public User findById(@PathVariable Long id) {// 調用注冊在Eureka上的服務端的地址return this.restTemplate.getForObject("http://microservice-provider-user/user/" + id, User.class);}@GetMapping("/callProvider")public String callUserInstance() {ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");// 打印當前選擇的哪個節點log.info("serviceId: {} , host: {} ,port: {} ,uri: {}" ,serviceInstance.getServiceId() , serviceInstance.getHost(), serviceInstance.getPort(),serviceInstance.getUri());return serviceInstance.getUri().toString();} }

我們把地址修改為了http://microservice-provider-user/user , 其中
microservice-provider-user用戶微服務的虛擬主機名,是注冊在Eureka Server上的名字,也是服務提供者微服務的配置文件中配置的spring.application.name
當Ribbon和Eureka同時使用時,會自動將虛擬主機名映射為微服務的網絡地址。

同時為了更加直觀的獲取當前選擇的用戶微服務節點,我們新增加了個方法callProvider,待會測試就可以看到效果了。


Step5: 驗證Ribbon提供的能力

1.啟動Eureka Server
2.啟動兩個 microservice-provider-user實例 。(在STS中啟動一個后,修改下application.yml的端口,再次run as spring boot app 即可啟動第二個實例,以此類推)
3.啟動microservice-provider-movie-ribbon
4.訪問Eureka Server的頁面,查看是否注冊成功

http://localhost:8761/login

登錄后,可以看到2個服務提供者,1個服務消費者都成功的注冊到了Eureka Server上。

我們在服務消費者微服務,調用的地址為
,對應兩個服務提供者的地址。

同時我們在服務消費者微服務工程中,為RestTemplate標注了@LoadBalanced注解,所以會使用Ribbon的負載均衡算法來分發到不同的服務提供者地址

多次訪問 http://localhost:7902/movie/1 ,觀察控制臺每個節點的日志輸出情況。

同時訪問http://localhost:7902/callProvider



注意事項

  • 默認情況下,虛擬主機名和服務名稱是一致的,也可以通過eureka.instance.virtual-host-name或者eureka.instance.secure-virtual-host-name指定虛擬主機名

  • 不能將restTemplate.getForObject()和loadBalancerClient寫在同一個方法中,兩者會沖突,因為RestTemplate實際上是一個Ribbon客戶端,本身已經包含了choose的行為

  • 虛擬主機名不能包含"_"之類的字符,否則Ribbon再調用的時候會拋出異常


  • 源碼

    https://github.com/yangshangwei/SpringCloudMaster

    總結

    以上是生活随笔為你收集整理的Spring Cloud【Finchley】-04使用Ribbon实现客户端负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。