SpringCloudカスタマイズRibbonクライアント負荷分散ポリシー


  • springColudディレクトリ
  • 前言
  • プロジェクトでは、マイクロサービスを導入する際にクラスタ形式で導入することが多く、同時性を向上させ、システムの堅牢性を保証することができます.対照的に、このクラスタに対して、負荷の均衡を保証するために一定の戦略が必要です.もう1つ、ribbonの動作原理は、登録センターからクラスタのアドレスリストを取得し、一定のポリシーでマイクロサービスのアドレスを選択してリンクすることです.これがクライアント発見モードです.

  • RibbonのEurekaでの使用
    依存の追加
  • は、spring-cloud-starter-eurekaにRibbonの依存パッケージが自動的に導入されるため、Eurekaの下でRibbonの依存を追加する必要はありません.

  • ribbonの使用には2つの方法があり、注釈方式とプロファイル方式を使用しています.以下、順に紹介します.
    注記モード
  • メインエントリプログラム
  • @SpringBootApplication
    @EnableEurekaClient
    @RibbonClient(name = "microservice-provider", configuration = TestConfiguration.class)
    @ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.ANNOTATION, value = ExcludeFromComponentScan.class) })
    public class MicroserviceConsumerApplication {
    
    
    	@Bean
    	@LoadBalanced
    	public RestTemplate restTemplate(){
    		return new RestTemplate();
    	}
    
    	public static void main(String[] args) {
    		SpringApplication.run(MicroserviceConsumerApplication.class, args);
    	}
    }
    
  • TestConfigurationファイル
  • @Configuration
    @ExcludeFromComponentScan
    public class TestConfiguration {
      //  @Autowired
      //  IClientConfig config;
    
      @Bean
      public IRule ribbonRule() {
        return new RandomRule();
      }
    }
    
  • ExcludeFromComponentScanファイル
  • public @interface ExcludeFromComponentScan {
    
    }
    
    

    説明:
  • @LoadBalancedはrestTemplateがRibbonを使用して負荷等化を行うことを指定しています.
  • @RibbonClientはmicroservice-providerというマイクロサービスクラスタに採用される負荷等化戦略がTestConfigurationによって説明されている.classファイル設定.
  • TestConfigurationの関数は負荷等化のポリシーを返し、RandomRuleはランダムを表します.
  • TestConfigurationがメインプログラムのファイルディレクトリおよびサブディレクトリの下に置かれている場合、springスキャン後、microservice-providerに対する負荷等化ポリシーだけでなく、すべての負荷等化ポリシーに設定されます.したがって、エントリプログラムのファイルディレクトリの外にファイルを配置するか、springスキャンを禁止します.スキャンを禁止するには、上記のようにメインプログラムに@ComponentScan注記を追加すると、springは@ExcludeFromComponentScan注記付きファイルをスキャンしません.
  • ribbonのデフォルトの負荷等化ポリシーはポーリングです.
  • 複数の構成が必要な場合は、@RibbonClients注記を使用します.次の
  • プロファイルベースの方法
    #     .ribbon.NFLoadBalancerRuleClassName:      
    microservice-provider:
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    
    @RibbonClients(value = {
            @RibbonClient(name = "xxx",configuration = xxxConfiguration.class),
            @RibbonClient(name = "microservice-provider",configuration = TestConfiguration.class)
    })
    

    使用例:
    @RestController
    public class MovieController {
    
        
        @Autowired
        private LoadBalancerClient loadBalancerClient;
    
        //            。
        @Autowired
        private RestTemplate restTemplate;
    
    
        @GetMapping("/movie/{id}")
        public User findById(@PathVariable Long id) {
            //  ribbon      ,    HTTP        ,          user.class   
            return this.restTemplate.getForObject("http://microservice-provider/simple/" + id, User.class);
        }
    
    
        @GetMapping("/test")
        public String test() {
    	   //                   。
            ServiceInstance serviceInstance = this.loadBalancerClient.choose("microservice-provider");
            System.out.println("111" + ":" + serviceInstance.getServiceId() + ":" + serviceInstance.getHost() + ":" + serviceInstance.getPort());
            return "1";
        }
    }
    
    

    独立してribbonを使用
    1.eurekaを導入した場合
  • eureka
  • を閉じる
  • listOfServer
  • を指定
    ribbon:
      eureka:
       enabled: false
    microservice-provider:
      ribbon:
        listOfServers: localhost:7900
    

    2.eurekaを導入しなかった場合
  • ribbon依存
  • を追加
     
               org.springframework.cloud
               spring-cloud-starter-ribbon
         /dependency>   
    
  • listOfServer
  • を指定
    microservice-provider:
      ribbon:
        listOfServers: localhost:7900