最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java Spring Cloud 負(fù)載均衡詳解

 更新時(shí)間:2021年09月18日 09:57:18   作者:bm1998  
這篇文章主要介紹了Spring Cloud負(fù)載均衡及遠(yuǎn)程調(diào)用實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1. Ribbon 客戶端負(fù)載均衡

1.1 Ribbon 概述

  • Ribbon 是 Netflix 提供的一個(gè)基于 HTTP 和 TCP 的客戶端負(fù)載均衡工具。
  • Ribbon主要有兩個(gè)功能:
    • 簡(jiǎn)化遠(yuǎn)程調(diào)用
    • 負(fù)載均衡

客戶端負(fù)載均衡和服務(wù)端負(fù)載均衡的區(qū)別

服務(wù)端負(fù)載均衡

  • 負(fù)載均衡算法在服務(wù)端
  • 由負(fù)載均衡器維護(hù)服務(wù)地址列表

在這里插入圖片描述

客戶端負(fù)載均衡

  • 負(fù)載均衡算法在客戶端
  • 客戶端維護(hù)服務(wù)地址列表

在這里插入圖片描述

1.2 Ribbon 遠(yuǎn)程調(diào)用

Ribbon 可以簡(jiǎn)化 RestTemplate 的遠(yuǎn)程調(diào)用。

原來(lái)的 Provider 中的遠(yuǎn)程調(diào)用如下:

@GetMapping("/goods/{id}")
public Goods findGoodsById(@PathVariable("id") int id){
    //演示discoveryClient 使用
    List<ServiceInstance> instances = discoveryClient.getInstances("eureka-provider");
    //判斷集合是否有數(shù)據(jù)
    if(instances == null || instances.size() == 0){
        //集合沒(méi)有數(shù)據(jù)
        return null;
    }
    ServiceInstance instance = instances.get(0);
    String host = instance.getHost();//獲取ip
    int port = instance.getPort();//獲取端口
    System.out.println(host);
    System.out.println(port);
    String url = "http://"+host+":"+port+"/goods/findOne/"+id;
    // 3. 調(diào)用方法
    Goods goods = restTemplate.getForObject(url, Goods.class);
    return goods;
}

使用 Ribbon 簡(jiǎn)化 restTemplate 調(diào)用:

1.在聲明 restTemplate 的 Bean 時(shí)候,添加一個(gè)注解:@LoadBalanced

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

2.在使用 restTemplate 發(fā)起請(qǐng)求時(shí),需要定義 url 時(shí),host:port 可以替換為服務(wù)提供方的應(yīng)用名稱

@GetMapping("/goods2/{id}")
public Goods findGoodsById2(@PathVariable("id") int id){
    String url = "http://EUREKA-PROVIDER/goods/findOne/"+id;
    // 3. 調(diào)用方法
    Goods goods = restTemplate.getForObject(url, Goods.class);
    return goods;
}

1.3 Ribbon 負(fù)載均衡

1.既然要負(fù)載均衡,那么我們就需要啟動(dòng)多個(gè) Provider 服務(wù)來(lái)構(gòu)成集群,在啟動(dòng)前先對(duì) Provider 改造一下,讓它將端口號(hào)設(shè)置到商品標(biāo)題上

package com.zt.provider.controller;

/**
 * Goods Controller 服務(wù)提供方
 */
@RestController
@RequestMapping("/goods")
public class GoodsController {
    @Value("${server.port}")
    private int port;
    @Autowired
    private GoodsService goodsService;
    @GetMapping("/findOne/{id}")
    public Goods findOne(@PathVariable("id") int id){
        Goods goods = goodsService.findOne(id);
        goods.setTitle(goods.getTitle() + ":" + port);//將端口號(hào),設(shè)置到商品標(biāo)題上
        return goods;
    }
}

2.接下來(lái)以多例啟動(dòng) Provider,選擇 edit configurations --> 勾選 allow parallel run

在這里插入圖片描述

在這里插入圖片描述

3.然后分別以 8001 和 8002 端口號(hào)分別啟動(dòng) Provider

在這里插入圖片描述

4.啟動(dòng) Consumer 進(jìn)行測(cè)試

http://localhost:9000/order/goods2/1

采用輪詢的方式,調(diào)用兩個(gè) 8001 和 8002 兩個(gè) Provider

{"id":1,"title":"華為手機(jī):8001","price":3999.0,"count":10000}
{"id":1,"title":"華為手機(jī):8002","price":3999.0,"count":10000}

1.4 Ribbon 負(fù)載均衡策略

策略類 命名 描述
RandomRule 隨機(jī)策略 隨機(jī)選擇server
RoundRobinRule 輪詢策略 輪詢選擇, 輪詢index,選擇index對(duì)應(yīng)位置的Server;
RetryRule 重試策略 對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制,在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇Server不成功,則一直嘗試使用subRule的方式選擇一個(gè)可用的server;
BestAvailableRule 最低并發(fā)策略 逐個(gè)考察server,如果server斷路器打開,則忽略,再選擇其中并發(fā)鏈接最低的server
AvailabilityFilteringRule 可用過(guò)濾策略 過(guò)濾掉一直失敗并被標(biāo)記為circuit tripped的server,過(guò)濾掉那些高并發(fā)鏈接的server(active connections超過(guò)配置的閾值)或者使用一個(gè)AvailabilityPredicate來(lái)包含過(guò)濾server的邏輯,其實(shí)就就是檢查status里記錄的各個(gè)Server的運(yùn)行狀態(tài);
ResponseTimeWeightedRule 響應(yīng)時(shí)間加權(quán)重策略 根據(jù)server的響應(yīng)時(shí)間分配權(quán)重,響應(yīng)時(shí)間越長(zhǎng),權(quán)重越低,被選擇到的概率也就越低。響應(yīng)時(shí)間越短,權(quán)重越高,被選中的概率越高,這個(gè)策略很貼切,綜合了各種因素,比如:網(wǎng)絡(luò),磁盤,io等,都直接影響響應(yīng)時(shí)間
ZoneAvoidanceRule 區(qū)域權(quán)重策略 綜合判斷server所在區(qū)域的性能,和server的可用性,輪詢選擇server并且判斷一個(gè)AWS Zone的運(yùn)行性能是否可用,剔除不可用的Zone中的所有server

設(shè)置負(fù)載均衡策略

1.編碼方式

在 Consumer 服務(wù)編寫配置類,采用隨即策略

package com.zt.consumer.config;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyRule {
    @Bean
    public IRule rule() {
       return new RandomRule();
    }
}

在啟動(dòng)類上設(shè)置給指定服務(wù)開啟負(fù)載均衡策略,比如給 EUREKA-PROVIDER 開啟策略 MyRule

package com.zt.consumer;
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
/*
    配置Ribbon的負(fù)載均衡策略 name
    * name:設(shè)置 服務(wù)提供方的 應(yīng)用名稱
    * configuration:設(shè)置負(fù)載均衡Bean
 */
@RibbonClient(name="EUREKA-PROVIDER",configuration = MyRule.class)
public class ConsumerApp {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApp.class, args);
    }
}

2.配置方式

# 配置的方式設(shè)置Ribbon的負(fù)載均衡策略
EUREKA-PROVIDER: # 設(shè)置的服務(wù)提供方的 應(yīng)用名稱
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 策略類

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Junit寫法及與spring整合過(guò)程詳解

    Junit寫法及與spring整合過(guò)程詳解

    這篇文章主要介紹了Junit寫法及與spring整合過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java返回前端實(shí)體類json數(shù)據(jù)時(shí)忽略某個(gè)屬性方法

    java返回前端實(shí)體類json數(shù)據(jù)時(shí)忽略某個(gè)屬性方法

    這篇文章主要給大家介紹了關(guān)于java返回前端實(shí)體類json數(shù)據(jù)時(shí)忽略某個(gè)屬性的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 關(guān)于Java的二叉樹、紅黑樹、B+樹詳解

    關(guān)于Java的二叉樹、紅黑樹、B+樹詳解

    這篇文章主要介紹了關(guān)于Java的二叉樹、紅黑樹、B+樹詳解,能同時(shí)具備數(shù)組查找快的優(yōu)點(diǎn)以及鏈表插入和刪除快的優(yōu)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)就是樹,需要的朋友可以參考下
    2023-05-05
  • 在SpringBoot 中從application.yml中獲取自定義常量方式

    在SpringBoot 中從application.yml中獲取自定義常量方式

    這篇文章主要介紹了在SpringBoot 中從application.yml中獲取自定義常量方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Spring Boot整合MyBatis-Flex全過(guò)程

    Spring Boot整合MyBatis-Flex全過(guò)程

    這篇文章主要介紹了Spring Boot整合MyBatis-Flex全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java.io.UnsupportedEncodingException異常的正確解決方法(親測(cè)有效!)

    java.io.UnsupportedEncodingException異常的正確解決方法(親測(cè)有效!)

    這篇文章主要給大家介紹了關(guān)于java.io.UnsupportedEncodingException異常的正確解決方法,文中介紹的辦法親測(cè)有效,java.io.UnsupportedEncodingException是Java編程語(yǔ)言中的一個(gè)異常類,表示指定的字符集不被支持,需要的朋友可以參考下
    2024-02-02
  • java腳本使用不同版本jdk的說(shuō)明介紹

    java腳本使用不同版本jdk的說(shuō)明介紹

    本文介紹了在Java中執(zhí)行JavaScript腳本的幾種方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine適用于JDK8及以下版本,而Nashorn和GraalVM分別推薦在JDK8及以上和JDK11及以上使用,后者支持更多語(yǔ)言并性能更優(yōu)
    2025-01-01
  • SpringBoot內(nèi)部外部配置文件加載順序解析

    SpringBoot內(nèi)部外部配置文件加載順序解析

    這篇文章主要介紹了SpringBoot內(nèi)部外部配置文件加載順序解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用Java8實(shí)現(xiàn)觀察者模式的方法(上)

    使用Java8實(shí)現(xiàn)觀察者模式的方法(上)

    本文給大家介紹使用java8實(shí)現(xiàn)觀察者模式的方法,涉及到j(luò)ava8觀察者模式相關(guān)知識(shí),對(duì)此感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • 教你用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)

    教你用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)

    這篇文章主要給大家介紹了關(guān)于用java?stream對(duì)集合中的對(duì)象按指定字段進(jìn)行分組并統(tǒng)計(jì)的相關(guān)資料,本文主要介紹了如何利用Java的Stream流來(lái)實(shí)現(xiàn)在list集合中,對(duì)具有相同name屬性的對(duì)象進(jìn)行匯總計(jì)算的需求,需要的朋友可以參考下
    2024-10-10

最新評(píng)論

方山县| 新丰县| 睢宁县| 汤原县| 天柱县| 文成县| 栾川县| 宁夏| 轮台县| 临湘市| 巴林左旗| 烟台市| 罗田县| 邢台市| 普兰店市| 肥东县| 罗甸县| 翼城县| 江阴市| 长岛县| 大足县| 鹰潭市| 高要市| 杂多县| 阳原县| 永泰县| 本溪市| 彭水| 封丘县| 申扎县| 慈溪市| 修水县| 调兵山市| 元朗区| 岳普湖县| 建昌县| 金塔县| 延边| 新邵县| 阿荣旗| 璧山县|