springcloud(第六編)スプリングcloud ribon


spring cloud ribon
概要ribbonを使用して負荷の等化を実現する.ソフト負荷の均衡を実現し、コアは三つあります.
  • サービス発見、依存サービスのリスト
  • が見つかりました.
  • サービス選択規則は、複数のサービスの中でどのように1つの有効サービスを選択しますか?
  • サービスの傍受、失効したサービスを検出し、失効したサービスを効率的に除去する
  • .
    netflix ribbon
    簡単なデモ
    設定ファイル:
    
    # Max number of retries on the same server (excluding the first try)
    sample-client.ribbon.MaxAutoRetries=1
    
    # Max number of next servers to retry (excluding the first server)
    sample-client.ribbon.MaxAutoRetriesNextServer=1
    
    # Whether all operations can be retried for this client
    sample-client.ribbon.OkToRetryOnAllOperations=true
    
    # Interval to refresh the server list from the source
    sample-client.ribbon.ServerListRefreshInterval=2000
    
    # Connect timeout used by Apache HttpClient
    sample-client.ribbon.ConnectTimeout=3000
    
    # Read timeout used by Apache HttpClient
    sample-client.ribbon.ReadTimeout=3000
    
    # Initial list of servers, can be changed via Archaius dynamic property at runtime
    sample-client.ribbon.listOfServers=www.u51.xin:80,www.baidu.com:80,www.163.com:80,www.csdn.net:80
    構成フォーマットは、clientName.spaceName.paramsコア構成sample-client.ribbon.listOfServersが有効であることを示すサービスリストである.BasicTest.java
    package com.lkl.springcloud.ribbon;
    
    import com.netflix.client.ClientFactory;
    import com.netflix.client.http.HttpRequest;
    import com.netflix.client.http.HttpResponse;
    import com.netflix.config.ConfigurationManager;
    import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
    import com.netflix.niws.client.http.RestClient;
    
    import java.net.URI;
    
    /** * Created by liaokailin on 16/5/6. */
    public class BasicTest {
    
        public static void main(String[] args) throws Exception{
    
            ConfigurationManager.loadPropertiesFromResources("sample-client.properties"); // 1
            System.out.println(ConfigurationManager.getConfigInstance().getProperty("sample-client.ribbon.listOfServers"));
            RestClient client = (RestClient) ClientFactory.getNamedClient("sample-client"); // 2
            HttpRequest request = HttpRequest.newBuilder().uri(new URI("/")).build(); // 3
            for (int i = 0; i < 20; i++) {
                HttpResponse response = client.executeWithLoadBalancer(request); // 4
                System.out.println("Status code for " + response.getRequestedURI() + " :" + response.getStatus());
            }
            ZoneAwareLoadBalancer lb = (ZoneAwareLoadBalancer) client.getLoadBalancer();
            System.out.println(lb.getLoadBalancerStats());
            ConfigurationManager.getConfigInstance().setProperty("sample-client.ribbon.listOfServers",
                    "www.qq.com:80,www.u51.xin"); // 5
            System.out.println("changing servers ...");
            Thread.sleep(3000); 
            for (int i = 0; i < 20; i++) {
                HttpResponse response = client.executeWithLoadBalancer(request);
                System.out.println("Status code for " + response.getRequestedURI() + " : " + response.getStatus());
            }
            System.out.println(lb.getLoadBalancerStats()); // 6
    
        }
    }
    
  • .構成ファイルをarchaiusでロードする
  • .ClientFactoryを介して指定名clientを取得し、この方法でloadBalancer
  • を取得した.
  • .構築要求
  • .loadBalancerを実行すると、呼び出したサービスがlistOfServersリストのデータに切り替わることが分かります.
  • .対応サービス一覧を変更する
  • .loadBalancer状態を取得する
  • ribbonコアコンポーネントは三つあります.
  • Rule-サービスリストから有効サービスを取得する方法
  • Ping-バックグラウンド実行スレッドは、サービスが利用可能かどうかを判断するために使用される
  • .
  • ServerList-サービスリスト
  • spring cloud ribon
    archaiusデフォルトローディングプロファイルconfig.propertiesribbon配置情報config.properties
    myclient.ribbon.listOfServers=www.u51.xin:80,www.baidu.com:80,www.163.com:80,www.csdn.net:80
    application.properties client名を設定する
    ribbon.client.name=myclient
    
    JAVAクラスに対応
    package com.lkl.springcloud.ribbon;
    
    import com.netflix.loadbalancer.Server;
    import com.netflix.loadbalancer.ServerList;
    import com.netflix.loadbalancer.ZoneAwareLoadBalancer;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.cloud.netflix.ribbon.RibbonClients;
    import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
    import org.springframework.util.CollectionUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /** * Created by liaokailin on 16/5/6. */
    @SpringBootApplication
    @RibbonClients
    @RestController
    public class RibbonDefaultConfigApplication {
        @Autowired
        private SpringClientFactory clientFactory;
    
        @RequestMapping("/")
        public void getServerList() throws Exception {
            ZoneAwareLoadBalancer<Server> lb = (ZoneAwareLoadBalancer<Server>) clientFactory.getLoadBalancer("myclient");
            ServerList<Server> serverList = lb.getServerListImpl();
    
    
            List<Server> serverDetailList = serverList.getInitialListOfServers();
            if (!CollectionUtils.isEmpty(serverDetailList)) {
                for (Server s : serverDetailList) {
                    System.out.println(s.getHost() + "," + s.getPort());
                }
            } else {
                System.out.println("no service");
            }
    
    
        }
    
        public static void main(String[] args) {
            SpringApplication app = new SpringApplicationBuilder(RibbonDefaultConfigApplication.class).build();
            app.run(args);
        }
    
    }
    
    
    @RibbonClientsを使用して注釈を付ける.getServerList方法では、まずZoneAwareLoadBalancerを取得し、その後serverListを取得し、serverListを取得した後に有効なサービスを選択して呼び出しを行うことができる.
    構成情報の変更が必要な場合は、@RibbonClientsdefaultConfigurationによって構成されてもよい.@RibbonClients(defaultConfiguration=MyDefaultRibbonConfig.class)のうち、MyDefaultRibbonConfig.classRibbonClientConfiguration.javaを参照することができる.
    ok~it’s workmore about is here