亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

發布時間:2021-11-17 13:55:54 來源:億速云 閱讀:390 作者:iii 欄目:大數據

本篇內容介紹了“怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

負載均衡策略  初體驗:

  • 步驟一:修改pom文件,修改服務調用方的pom文件,添加test依賴

<!--測試-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

  • 步驟二:編寫測試類,在服務調用方編寫Junit測試類

package com.czxy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;


@SpringBootTest(classes=Client4Application.class)       //Junit和Spring boot整合,將所有實例加載到spring容器。
@RunWith(SpringRunner.class)        //JUnit和Spring整合,將spring容器中的數據注入當前類
public class TestRibbon {
    @Resource
    private RibbonLoadBalancerClient client;

    @Test
    public void testDemo(){
        // 通過“服務名”獲得對應服務實例
        for (int i = 0; i < 10; i++) {
            ServiceInstance instance = client.choose("service4");
            System.out.println(instance.getHost() + ":">
  • 步驟三:修改提供方yml文件,支持顯示IP地址,并重啟8081和8082

#服務名
spring:
  application:
    name: service4
#注冊地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
  instance:
    prefer-ip-address: true   #顯示IP地址

修改策略

給指定的“服務”設置策略

服務名.ribbon.NFLoadBalancerRuleClassName=策略實現類
service4:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule    #隨機
    #NFLoadBalancerRuleClassName : com.netflix.loadbalancer.BestAvailableRule           #并發最少
    #NFLoadBalancerRuleClassName : com.netflix.loadbalancer.WeightedResponseTimeRule    #請求時間權重

重試機制

  • 重試機制:服務B訪問集群環境下的服務A,某一個服務A宕機,服務B將嘗試訪問其他可以使用的服務A。

    • 9090訪問 8081和8082

    • 如果8082宕機了

    • 9090將嘗試訪問8081

  • 步驟一:修改pom文件,添加重試retry依賴

<!--重試機制-->
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
  • 步驟二:修改yml文件,開啟cloud重試機制

spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true   #開啟重試機制
  • 步驟三:修改yml文件,配置當前服務的重試參數

service4:
  ribbon:
    ConnectTimeout: 250               # Ribbon的連接超時時間
    ReadTimeout: 1000                 # Ribbon的數據讀取超時時間
    OkToRetryOnAllOperations: true    # 是否對所有操作都進行重試
    MaxAutoRetriesNextServer: 1       # 切換實例的重試次數
    MaxAutoRetries: 1                 # 對當前實例的重試次數

Hystix熔斷器

Hystrix是Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程服務、第三方庫,防止出現級聯失敗。

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

Hystrix 入門

  • 步驟一:修改pom,添加熔斷器依賴

  • 步驟二:修改啟動類,添加開啟熔斷器注解 @EnableHystrix

  • 步驟三:改造dao,遠程調用添加 熔斷器的備選方案,添加注解 + 備用方法

  • 步驟四:改變服務提供方法,添加線程sleep,0~2000隨機 (測試方便)

  • 步驟一:修改pom,添加熔斷器依賴

<!--熔斷器-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

  • 步驟二:修改啟動類,添加開啟熔斷器注解 @EnableHystrix

package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;


@SpringBootApplication
@EnableEurekaClient
@EnableHystrix      //開啟熔斷器
public class Client4Application {
    public static void main(String[] args) {
        SpringApplication.run(Client4Application.class,args);
    }
}

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

  • 步驟三:改造dao,遠程調用添加 熔斷器的備選方案,添加注解 + 備用方法

package com.czxy.dao;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@Component
public class DataDao {
    @Resource
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "dataFallback")
    public ResponseEntity<String> data(){
        String url = "http://service4/test";
        return restTemplate.getForEntity(url,String.class);
    }

    /**
     * 熔斷器超時處理方法
     * @return
     */
    public ResponseEntity<String> dataFallback(){
        return ResponseEntity.ok("臨時數據");
    }
}
  • 步驟四:改變服務提供方法,添加線程sleep,0~~2000隨機 (測試方便)

package com.czxy.controller;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Random;


@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping
    public ResponseEntity<String> test(HttpServletRequest request) throws Exception {
        //模擬延遲
        Thread.sleep(new Random().nextInt(2000));
        return ResponseEntity.ok("測試數據" + request.getServerPort());
    }
}

怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器

  • 步驟五:優化dao,打印耗時時間

package com.czxy.dao;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;


@Component
public class DataDao {
    @Resource
    private RestTemplate restTemplate;
    @HystrixCommand(fallbackMethod = "dataFallback")
    public ResponseEntity<String> data(){
        //1 記錄開始時間
        long start = System.currentTimeMillis();
        //2 調用
        String url = "http://service4/test";
        ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
        //3 記錄結束時間
        long end = System.currentTimeMillis();
        //4 統計耗時
        System.out.println("耗時時間:" + (end - start));
        return entity;
    }

    /**
     * 熔斷器超時處理方法
     * @return
     */
    public ResponseEntity<String> dataFallback(){
        return ResponseEntity.ok("臨時數據");
    }
}

(面試題)如果項目中同時使用熔斷器和Ribbon重試機制,誰先執行?

  • 如果時間不相同,超時時間小的,先執行。

  • 如果時間相同,只執行熔斷器

  • 結論:如果兩個都需要配置,重試機制的超時時間 小于 熔斷器

“怎么理解Spring Cloud的負載均衡策略+重試機制+Hystrix 熔斷器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英吉沙县| 个旧市| 贵定县| 巴马| 达尔| 会同县| 铁岭县| 嘉兴市| 康保县| 桂林市| 闵行区| 阿图什市| 榆树市| 随州市| 通化县| 米易县| 昭通市| 女性| 承德县| 巴彦淖尔市| 若尔盖县| 东光县| 锡林郭勒盟| 望谟县| 田林县| 澄江县| 邹城市| 西昌市| 西充县| 通榆县| 东乌珠穆沁旗| 通渭县| 毕节市| 东至县| 昌平区| 西畴县| 邵武市| 三江| 湖州市| 三门峡市| 徐汇区|