中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springcloud~ LoadBalancer

前言

由(you)于 Netflix Ribbon 進入停(ting)更維(wei)護階段,因此(ci)(ci) SpringCloud 2020.0.1 版本之后(hou) 刪除了eureka中的(de)(de)(de)ribbon,替(ti)代(dai)ribbon的(de)(de)(de)是spring cloud自帶的(de)(de)(de)LoadBalancer,默認使用的(de)(de)(de)是輪詢的(de)(de)(de)方式(shi),新版本的(de)(de)(de) Nacos discovery 都已經移除了 Ribbon ,此(ci)(ci)時我們需(xu)要引入loadbalancer代(dai)替(ti),才能調用服務提供(gong)(gong)者提供(gong)(gong)的(de)(de)(de)服務。

Spring Cloud全家桶在(zai)Spring Cloud Commons項目(mu)中,添加了Spring cloud Loadbalancer作為新的(de)負載均衡器,并且做了向前(qian)兼(jian)容,就(jiu)算你(ni)的(de)項目(mu)中繼(ji)續用 Spring Cloud Netflix 套裝(包括Ribbon,Eureka,Zuul,Hystrix等(deng)(deng)等(deng)(deng))讓(rang)你(ni)的(de)項目(mu)中有這些(xie)依賴(lai),你(ni)也可以通過簡單的(de)配置,把(ba)ribbon替換成(cheng)Spring Cloud LoadBalancer。

均衡負載

  • 大概就是兩種:網關層均衡負載和客戶端層均衡負載
  • 網關層想我之前公司有用的F5,就是在網管層做均衡負載,就是你只管請求我,我來負責維護服務地址列表,你也不需要搞什么服務發現這些。(壞處是涉及到網關層維護,網絡消耗和復雜度維護角度不簡單)
  • 客戶端層就好比我們這個LoadBalancer,就是我作為一個客戶端我自己去不斷去發現更新維護自己的一套服務列表,我自己去定義服務的均衡負載策略,不管是隨機還是計數甚至可以搞小流量的金絲雀

客戶端負載均衡組件

架構設計

  • 默認使用BlockingLoadBalancerClient來實現,也可以自己去定義,不建議再使用ribbon了。

兩種負載算法

目前 SpringCloud LoadBalance 僅支持兩種負載(zai)均衡策略(lve):【輪詢(xun)策略(lve)】和【隨機(ji)策略(lve)】,默認是(shi)輪詢(xun)策略(lve)。

隨機策略的使用

  • 首先需要定義隨機的算法對象,并通過 @Bean 將其加載到 Spring 容器中,具體如下:
public class RandomLoadBalancerConfig {

    @Bean
    ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
            Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {

        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new RandomLoadBalancer(loadBalancerClientFactory
                .getLazyProvider(name, ServiceInstanceListSupplier.class), name);
    }
}
  • 然后在@LoadBalancerClient 或 @LoadBalancerClients 注解,針對具體服務配置具體的客戶端負載均衡算法策略。
@LoadBalancerClient(name = "PROVIDER-APP", configuration = RandomLoadBalancerConfig.class)
@Configuration
public class RestTemplateConfig {

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

相關配置

spring:
  cloud:
    loadbalancer:
      health-check:
        initial-delay: 1s
      clients:
        myclient:
          health-check:
            interval: 30s

上面的例子將合成一個@ConfigurationProperties的對象并且(qie)設置(zhi)了initial-dalay=1s和(he)interval=30s。

  • 大多數client屬性可以單獨配置,除了以下的全局配置:
spring.cloud.loadbalancer.enabled:全局啟用/關閉load-balancingspring.cloud.loadbalancer.retry.enabled:全局啟用/關閉load-balancing重試機制,如果全局啟用了它,仍然可以在單獨的client屬性中配置來關閉它。spring.cloud.loadbalancer.cache.enabled:全局啟用/關閉load-balancing緩存,如果全局啟用了它,仍然可以通過創建自定義配置(在ServiceInstanceListSupplier委托層級中不包含CachingServiceInstanceListSupplier)來關閉它。spring.cloud.loadbalancer.stats.micrometer.enabled:全局啟用/關閉LoadBalancer Micrometer metrics。

幾個注解

  • @LoadBalanced

使用@LoadBalanced注解描述RestTemplate對象時,系統底層在基于(yu)RestTemplate進(jin)行(xing)遠程服(fu)務(wu)調(diao)用時,會(hui)被一個攔截(jie)(jie)器(qi)(LoadBalancerInterceptor)攔截(jie)(jie)到,然(ran)后進(jin)行(xing)功(gong)能增強,這(zhe)里的功(gong)能增強指的是,基于(yu)loadBalancerClient對象進(jin)行(xing)服(fu)務(wu)實(shi)例獲(huo)取(qu),而這(zhe)個服(fu)務(wu)實(shi)例獲(huo)取(qu)的過程,底層會(hui)采(cai)用負(fu)載均(jun)衡。

  • @EnableFeignClients

用于描述一些配置類,告訴系統底層啟動時為@FeignClient注解描述的接口創建實(shi)現類及對象,然后(hou)交(jiao)給Spring管理

  • @FeignClient

@FeignClient 注解告訴Feign Starter,在項目啟動時,為此注解描述的接口創建實現類-代理類,用于描述遠程服務調用接口,其value屬性值有兩個層面的含義:
1.你要調用的遠程服務名
2.當(dang)前bean的名字,假如不(bu)使用這個名字還可(ke)以(yi)使用contextId指定bean的名字

OpenFeign

  • OpenFeign 同時集成了 Spring Cloud LoadBalancer 和 Spring Cloud CircuitBreaker,提供負載均衡和熔斷降級的功能。
  • Feign 默認的負載均衡策略是輪詢調用。
posted @ 2023-05-05 09:16  張占嶺  閱讀(635)  評論(0)    收藏  舉報