Spring - 리본 클 라 이언 트 부하 균형

Spring - 리본 클 라 이언 트 부하 균형
넷 플 릭 스 리본 을 기반 으로 한 기본 HTTP 와 TCP 의 클 라 이언 트 부하 균형 작업독립 적 으로 배치 할 필요 가 없 이 도구 류 프레임 워 크 로 사용 합 니 다.
사용 방식
  • 시작 클래스
    /*   Eureka     */
    @EnableDiscoveryClient
    @SpringBootApplication
    public class SpringBootTestRibbonConsumerApplication {
    
        /* ,                */
        @Bean
        @LoadBalanced
        TestRestTemplate restTemplate(){
            return  new TestRestTemplate();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootTestRibbonConsumerApplication.class, args);
        }
    }
    
  • pom.xml
    
        ......
        
            org.springframework.cloud
            spring-cloud-starter-eureka
        
    
        
            org.springframework.cloud
            spring-cloud-starter-ribbon
        
        .......
    
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Brixton.SR5
                pom
                import
            
        
    
    
  • 프로필 [설정 가능 한 것]
    spring.application.name=ribbon-consumer
    server.port=9000
    
    eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
    
    #      hello-service       
    
    #         ,     。
    spring.cloud.loadablancer.retry.enabled = true
    #             Ribbon     ,        
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
    #         
    hello-service.ribbon.ConnectTimeout=250
    #         
    hello-service.ribbon.ReadTimeout=1000
    #             
    hello-service.ribbon.OkRoRetryOnAllOperations = true
    #          
    hello-service.ribbon.MaxAutoRetriesNextServer = 2
    #            
    hello-service.ribbon.MaxAutoRetries = 1
    
    ### sample-client in baidu
    ## Max number of retries
    #ribbon.MaxAutoRetries=1
    ## Max number of next servers to retry (excluding the first server)
    #ribbon.MaxAutoRetriesNextServer=1
    ## Whether all operations can be retried for this client
    #ribbon.OkToRetryOnAllOperations=true
    ## Interval to refresh the server list from the source
    #ribbon.ServerListRefreshInterval=2000
    ## Connect timeout used by Apache HttpClient
    #ribbon.ConnectTimeout=3000
    ## Read timeout used by Apache HttpClient
    #ribbon.ReadTimeout=3000
    ## Initial list of servers, can be changed via Archaius dynamic property at runtime
    #ribbon.listOfServers=testserver1:80,testserver2 :80,testserver3:80
    #ribbon.EnablePrimeConnections=true
    
  • 그 실례 에 대한 사용 현황:
    @RestController
    public class UsedHelloController {
    
        /*             */
        @Autowired
        RestTemplate restTemplate;
    
        @RequestMapping(value = "ribbon-consumer",method = RequestMethod.GET)
        public String helloConsumer(){
            /* ,                 */
            return restTemplate.getForEntity("http://hello-service/hello",String.class).getBody();
        }
    
        // RestTemplate   
        @RequestMapping(value = "ribbon-consumer-get",method = RequestMethod.GET)
        public String helloConsumerTestGet(){
            /*getForEntity   1:  3   
            * String URL:    
            * Class responseType:    
            * Object... urlVariables:          */
            ResponseEntity responseEntity = restTemplate.getForEntity("http://hello-service/hello?name={1}",String.class,"  1");
            String body = responseEntity.getBody();
    
            /*getForEntity   2:  3   
             * String URL:    
             * Class responseType:    
             * Map urlVariables :     Map
             */
            Map params = new HashMap<>();
            params.put("name","name");
            responseEntity = restTemplate.getForEntity("http://hello-service/hello?name={name}",String.class,params);
            body = responseEntity.getBody();
    
             /*getForEntity   3:  2   
              * URI: java.net                
              * Class responseType:    
              *   :  ╮(╯_╰)╭ */
    
             /*      3     getForObject(。。。)      3    */
            return body;
        }
    
        @RequestMapping(value = "ribbon-consumer-post",method = RequestMethod.POST)
        public String helloConsumerTestPost(){
            User user = new User("name");
       //   String user = new String();
            ResponseEntity responseEntity = restTemplate.postForEntity("http://hello-service/hello",user,String.class);
            /*       ,           ,              */
            String body = responseEntity.getBody();
            return body;
            /* get     3    ,             
            *    postForObject   postForLocation */
        }
    
        public class User {
            private String name;
    
           public User(String name){
                this.name = name;
            }
    
            public User() {
    
            }
        }
    
        @RequestMapping(value = "ribbon-consumer-put",method = RequestMethod.PUT)
        public String helloConsumerTestPut(){
            User user = new User("name");
            Long id = 100L;
            restTemplate.put("http://hello-service/hello/{1}",user,id);
            /*     3    ,  put        */
            return null;
        }
    
        @RequestMapping(value = "ribbon-consumer-del",method = RequestMethod.DELETE)
        public String helloConsumerTestDel(){
            User user = new User("name");
            Long id = 100L;
            restTemplate.delete("http://hello-service/hello/{1}",id);
            /*     3    ,  put        */
            return null;
        }
    
    }
    
  • 일부 배치 설명 과 상세 설명
    간단 한 기본 값: 다른 관리 프레임 워 크 를 사용 하지 않 는 상황 에서 의 설정: * IclientConfig: Ribbon 의 클 라 이언 트 설정, 기본 값 은 com. netflix. client. config. Default Client ConfigImpl 구현 * IRule: Ribbon 의 복잡 한 균형 전략 을 사용 합 니 다. 기본 값 은 com. netflix. loadbancer. Zone Avoidance Rule 로 이 루어 집 니 다.정책 을 바 꾸 면 여러 지역 환경 에서 가장 좋 은 지역 의 인 스 턴 스 를 선택 하여 접근 할 수 있 습 니 다. *IPing: Ribbon 의 인 스 턴 스 검사 정책 은 기본적으로 com. netflix. loadbancer. NoOpPing 입 니 다. 실제로 검사 하지 않 고 true 로 돌아 갑 니 다. 기본 인 스 턴 스 는 모두 사용 할 수 있 습 니 다. *SercerList: 서비스 인 스 턴 스 목록 의 유지 체 제 는 기본적으로 com. netflix. loadbancer. Configuration BasedSercerList 입 니 다. *ServerLisetFilter: 서비스 인 스 턴 스 목록 필터 메커니즘, 기본 값 은 org. springframework. netflix. ribbon. Zone Preference ServerListFilter 입 니 다. 정책 은 요청 호출 자 와 같은 지역 에 있 는 서비스 인 스 턴 스 를 제한 적 으로 걸 러 냅 니 다. *ILoadBalancer: 부하 균형 기, 기본 사용: com. netflix. loadbancer. Zone AwareLoadBalancer 구현, 지역 감지 능력 을 갖 추고 있 습 니 다.
    이러한 자동화 설정 내용 은 Rureka 등 서비스 관리 프레임 워 크 를 사용 하지 않 았 을 때 만 이 모양 입 니 다 (ノ 'Д)ノ
    Camden 버 전 은 RibbonClient 설정 을 최적화 시 켰 습 니 다. 설정 파일 을 사용 하면 됩 니 다. 예 를 들 어:
    hello-server.ribbon.NFLoadBalancerPingClassName = com.net.loadbalancer.PingUrl
    ##   PingUrl     IPing     
    ##     hello-server         
    ##                 :org.springframework.cloud.netflix.ribbon.PropertiesFactory 
    

    Eureka 와 결합 하여 사용:
         Eureka Ribbon      :
    ServerLiset  :com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSSercerList
    IPing:com.netflix.niws.loadbalancer.NIWSDiscoveryPing
    ServerList  :com.SpringFamework.cloud.netflix.ribbon.eureka.DomainExtractingServerLiset
    

    Eureka 의 인 스 턴 스 데이터 원본 을 통 해 설정 할 수 있 습 니 다: 사용자 정의 영역 값 설정:
    eureka.instance.metadataMap.zone = shanghai
    

    Eureka 를 닫 고 Ribbon 의 서비스 인 스 턴 스 유 지 를 실현 합 니 다.
    ribbon.eureka.enabled = false 
    

    저장 성ε=(´ο`*)))에이, 감기...

    좋은 웹페이지 즐겨찾기