日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

實(shí)現(xiàn)負(fù)載均衡

更新時(shí)間:

Spring Cloud的負(fù)載均衡是通過Ribbon組件完成的。Ribbon主要提供客戶側(cè)的軟件負(fù)載均衡算法,實(shí)現(xiàn)Spring Cloud中的RestTemplate和Feign客戶端底層的負(fù)載均衡。本文介紹如何使用Ribbon實(shí)現(xiàn)Spring Cloud應(yīng)用的負(fù)載均衡。

背景信息

Nacos集成了Ribbon的功能,NacosServerList實(shí)現(xiàn)了Ribbon提供的com.netflix.loadbalancer.ServerList接口。這個(gè)接口是通用的,其它類似的服務(wù)發(fā)現(xiàn)組件,Eureka、Consul、ZooKeeper也都實(shí)現(xiàn)了對(duì)應(yīng)的ServerList接口,例如DomainExtractingServerList、ConsulServerList和ZookeeperServerList等。

實(shí)現(xiàn)該接口相當(dāng)于接入了通用的Spring Cloud負(fù)載均衡規(guī)范。從Eureka、Consul、ZooKeeper等服務(wù)發(fā)現(xiàn)方案切換到Spring Cloud Alibaba的服務(wù)發(fā)現(xiàn)方案,無論是RestTemplate、FeignClient,以及已過時(shí)的AsyncRestTemplate,都無需修改任何代碼,即可實(shí)現(xiàn)負(fù)載均衡。

說明

EDAS兼容Hystrix,但是前提是客戶端需要引入Hystrix的依賴。支持fallback屬性,也可以通過Sentinel實(shí)現(xiàn)。

在本地開發(fā)應(yīng)用時(shí),可以使用Alibaba Cloud Toolkit插件實(shí)現(xiàn)本地應(yīng)用和部署在EDAS中的應(yīng)用的相互調(diào)用,即端云互聯(lián),而無需搭建VPN,幫助您提升開發(fā)效率。更多信息,請(qǐng)參見端云互聯(lián)簡介

您可以按照本文的內(nèi)容實(shí)現(xiàn)應(yīng)用的負(fù)載均衡,也可以直接下載應(yīng)用Demo:service-providerservice-consumer

RestTemplate和Feign的實(shí)現(xiàn)方式有所不同,下面將分別介紹如何在您的應(yīng)用中實(shí)現(xiàn)RestTemplate和Feign的負(fù)載均衡用法。

RestTemplate

RestTemplate是Spring提供的用于訪問REST服務(wù)的客戶端,提供了多種便捷訪問遠(yuǎn)程HTTP服務(wù)的方法,能夠大大提高客戶端的編寫效率。

您需要在您的應(yīng)用中按照下面的示例修改代碼,以便使用RestTemplate的負(fù)載均衡功能。

public class MyApp {
    // 注入剛剛使用@LoadBalanced注解修飾構(gòu)造的RestTemplate。
    // 該注解相當(dāng)于給RestTemplate加上了一個(gè)攔截器:LoadBalancerInterceptor。
    // LoadBalancerInterceptor內(nèi)部會(huì)使用LoadBalancerClient接口的實(shí)現(xiàn)類RibbonLoadBalancerClient完成負(fù)載均衡。
    @Autowired
    private RestTemplate restTemplate;

    @LoadBalanced // 使用@LoadBalanced注解修改構(gòu)造的RestTemplate,使其擁有一個(gè)負(fù)載均衡功能。
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    // 使用RestTemplate調(diào)用服務(wù),內(nèi)部會(huì)使用負(fù)載均衡調(diào)用服務(wù)。
    public void doSomething() {
        Foo foo = restTemplate.getForObject("http://service-provider/query", Foo.class);
        doWithFoo(foo);
    }

    ...
}            

Feign

Feign是一個(gè)Java實(shí)現(xiàn)的HTTP客戶端,用于簡化RESTful調(diào)用。

配合 @EnableFeignClients和 @FeignClient完成負(fù)載均衡請(qǐng)求。

  1. 使用 @EnableFeignClients開啟Feign功能。

    @SpringBootApplication
    @EnableFeignClients // 開啟Feign功能。
    public class MyApplication {
      ...
    }                        
  2. 使用 @FeignClient構(gòu)造FeignClient。

    @FeignClient(name = "service-provider")
    public interface EchoService {
            @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
            String echo(@PathVariable("str") String str);
    }                        
  3. 注入EchoService并完成echo方法的調(diào)用。

    調(diào)用echo方法相當(dāng)于發(fā)起了一個(gè)HTTP請(qǐng)求。

    public class MyService {
    @Autowired // 注入剛剛使用@FeignClient注解修飾構(gòu)造的EchoService。
        private EchoService echoService;
    
        public void doSomething() {
        // 相當(dāng)于發(fā)起了一個(gè)http://service-provider/echo/test請(qǐng)求。
        echoService.echo("test");
            }
        ...
    }                        

結(jié)果驗(yàn)證

service-consumer和多個(gè)servce-provider啟動(dòng)后,訪問service-consumer提供的URL,確認(rèn)是否實(shí)現(xiàn)了負(fù)載均衡。

  • RestTemplate

    多次訪問/echo-rest/rest-test查看是否轉(zhuǎn)發(fā)到不同的實(shí)例。

  • Feign

    多次訪問/echo-feign/feign-test查看是否轉(zhuǎn)發(fā)到不同的實(shí)例。