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

歡迎訪問 生活随笔!

生活随笔

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

javascript

SpringCloud系列七:使用Ribbon实现客户端侧负载均衡

發布時間:2023/12/13 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud系列七:使用Ribbon实现客户端侧负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 回顧

  在前面,已經實現了微服務的注冊與發現。啟動各個微服務時,Eureka Client會把自己的網絡信息注冊到Eureka Server上。

  但是,在生成環境中,各個微服務都會部署多個實例,因此還行繼續進行優化。

2. Ribbon簡介

  Ribbon是Netflix發布的負載均衡器,它有助于控制HTTP和TCP客戶端的行為。為Ribbon配置服務提供者地址列表后,Ribbon就可基于某種負載均衡算法,

  自動地幫助服務消費者去請求。Ribbon默認為我們提供了很多的負載均衡算法,例如輪詢、隨機等。我們也可為Ribbon實現自定義的負載均衡算法。

?

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

3. 為服務消費者整合Ribbon

  > 復制項目 microservice-consumer-movice,修改ArtifactId為 microservice-consumer-movie-ribbon

  > 為項目microservice-consumer-movie添加Ribbon的依賴。但是前文已經為該服務添加spring-cloud-starter-netflix-eureka-client依賴,

    該依賴已經包含了 spring-cloud-starter-netflix-ribbon 依賴,所以無需再次引入。

  > 在啟動類中,為RestTemplate添加@LoadBalanced注解。

package com.itmuch.cloud.microserviceconsumermovie;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate;@SpringBootApplication @EnableDiscoveryClient public class MicroserviceConsumerMovieApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceConsumerMovieApplication.class, args);}@Bean@LoadBalanced // 實現負載均衡public RestTemplate restTemplate() {return new RestTemplate();} }

  > 修改MovieController類,便于發現是否實現負載均衡

package com.itmuch.cloud.microserviceconsumermovie.controller;import com.itmuch.cloud.microserviceconsumermovie.pojo.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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;@RestController public class MovieController {private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@GetMapping("/user/{id}")public User findById(@PathVariable Long id) {return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class);}@GetMapping("/log-instance")public void logUserInstance() {ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider-user");// 打印當前選擇的是哪個節點MovieController.LOGGER.info("{}:{}:{}", serviceInstance.getServiceId(), serviceInstance.getHost(),serviceInstance.getPort());}}

  > 啟動 microservice-discovery-eureka

  > 啟動兩個以上的 microservice-provider-user 實例(啟動前檢查application.yml,spring.jpa.hibernate.ddl-auto值為update,否則不能自動創建表結構;

    檢查eureka.client.service-url.defaultZone的值是否為注冊中心的url

  > 啟動 microservice-consumer-movie-ribbon

  > 訪問 http://localhost:8761

?

  > 多次訪問 http://localhost:8010/user/1

    并且,在多個 microservice-provider-user 實例中都會打印如下日志:

    表明:Ribbon成功的將請求負載到不同的實例上了

  > 多次訪問 http://localhost:8010/log-instance ,在 microservice-consumer-movie 項目的日志中可發現如下日志:

    表明:Ribbon成功的將請求負載到不同的實例上了

?4. 總結

  本文已經實現了用Ribbon實現客戶端的負載均衡。

  下次將講解自定義Ribbon配置,敬請期待~~~

5. 參考

  周立 --- 《Spring Cloud與Docker微服務架構與實戰》

轉載于:https://www.cnblogs.com/jinjiyese153/p/8651123.html

總結

以上是生活随笔為你收集整理的SpringCloud系列七:使用Ribbon实现客户端侧负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

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