Spring Cloud 부하 균형 기 리본 원리 및 실현

6860 단어 SpringCloudRibbon
리본 소개
분산 식 시스템 에서 각 마이크로 서 비 스 는 여러 개의 인 스 턴 스 를 배치 할 것 이다.어떻게 서비스 소비 자 를 여러 서비스 제공 자의 인 스 턴 스 에 골 고루 분담 하 는 지 부하 이퀄 라이저 에 사용 해 야 한다.
Ribbon 은 부하 이퀄 라이저 로 서 많은 부하 균형 알고리즘 을 제공 합 니 다.예 를 들 어 폴 링,즉시 등 은 서비스 제공 자의 주 소 를 설정 한 후에 서비스 소비자 의 요 구 를 골 고루 나 누 어 줄 수 있 습 니 다.

서비스 소비 자 를 위 한 리본 통합
리본 의존 라 이브 러 리 추가

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-ribbobn</artifactId>
</dependency>
RestTemplate 에@LoadBalaced 주 해 를 추가 하면 RestTemplate 와 Ribbon 을 통합 할 수 있 습 니 다.

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
  return new RestTemplate();
}
Controller 변경,요청 주소 변경http://flim-user/user/ ,Ribbon 과 Eureka 가 함께 사용 할 때 가상 호스트 이름 을 마이크로 서비스의 네트워크 주소 로 자동 으로 표시 하고 LoadBalancerClient 출력 현재 선택 한 마이크로 서비스 노드 를 주입 합 니 다.

@RestController
public class MovieController {

  private final Logger log = LoggerFactory.getLogger(MovieController.class);

  @Autowired
  private RestTemplate restTemplate;

  @Autowired
  private LoadBalancerClient loadBalancerClient;

  @GetMapping("/user/{id}")
  public User findById(@PathVariable int id){
    return this.restTemplate.getForObject("http://flim-user/"+id,User.class);
  }

  @GetMapping("/log-instance")
  public void logInstance(){
    ServiceInstance serviceInstance = this.loadBalancerClient.choose("flim-user");
    log.info("{}:{}:{}",serviceInstance.getServiceId(),serviceInstance.getHost(),serviceInstance.getPort());
  }
}

테스트 프로그램 실행
Eureka Server 시작4
  • 2 개 이상 의 flim-user 인 스 턴 스 를 시작 합 니 다
  • flim-consumer 시작방문http://localhost:8761/ 마이크로 서비스 flim-user 등록 성공 여부 보기여러 번 방문 하 다http://localhost:8010/user/1 다음 결 과 를 되 돌려 드 리 겠 습 니 다.
    {"id":1,"username":"account 1","name":"장삼","age":20,"balance":100.00}
    여러 번 방문 하 다.http://localhost:8010/log-instance 콘 솔 은 다음 과 같은 정 보 를 출력 합 니 다.

    요청 이 두 사용자 의 마이크로 서비스 에 고 르 게 분포 되 어 있 음 을 볼 수 있 습 니 다.
    2017-12-17 20:47:53.975  INFO 12313 --- [nio-8010-exec-2] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
    2017-12-17 20:47:54.215  INFO 12313 --- [nio-8010-exec-1] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    2017-12-17 20:47:54.445  INFO 12313 --- [nio-8010-exec-3] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
    2017-12-17 20:47:54.690  INFO 12313 --- [nio-8010-exec-4] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    2017-12-17 20:47:54.935  INFO 12313 --- [nio-8010-exec-5] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
    메모:restTemplate.getForObject(...)와 loadBalancerClient.choose(...)를 같은 방법 으로 쓸 수 없습니다.rest-Template 는 실제 적 으로 Ribbon 클 라 이언 트 이기 때문에 그 자체 에'choose'행 위 를 포함 하고 있 습 니 다.
    코드 방식 설정 리본
    자바 코드 나 속성 을 사용 하여 Ribbon 설정 을 사용자 정의 할 수 있 습 니 다.Ribbon 기본 설정 류 는 Ribbon Client Configuration 이 고 POJO 사용자 정의 Ribbon 설정 을 사용 할 수 있 습 니 다.이 설정 은 입자 가 가 늘 고 서로 다른 Ribbon 클 라 이언 트 는 서로 다른 설정 을 사용 할 수 있 습 니 다.
    리본 설정 클래스 만 들 기
    
    /**
     *       
     *     ComponentScan  
     */
    @Configuration
    public class RibbonConfiguration {
      @Bean
      public IRule ribbonRule(){
        //         ,     
        return new RandomRule();
      }
    }
    
    @RibbonClient 또는@RibbonClient 주 해 를 서비스 제공 자가 지정 한 설정 클래스 로 사용 합 니 다.
    
    @SpringBootApplication
    @EnableDiscoveryClient
    @RibbonClient(name = "flim-user",configuration = RibbonConfiguration.class)
    public class FlimConsumerApplication {
      @Bean
      @LoadBalanced
      public RestTemplate restTemplate(){
        return new RestTemplate();
      }
      public static void main(String[] args) {
        SpringApplication.run(FlimConsumerApplication.class, args);
      }
    }
    
    액세스 테스트 주소http://localhost:8010/log-instance 는 요청 이 두 마이크로 서비스 에 무 작위 로 분포 되 어 있 음 을 볼 수 있 습 니 다.
    2017-12-17 21:08:52.769  INFO 12524 --- [nio-8010-exec-7] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    2017-12-17 21:08:52.946  INFO 12524 --- [nio-8010-exec-8] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    2017-12-17 21:08:53.138  INFO 12524 --- [nio-8010-exec-9] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    2017-12-17 21:08:53.319  INFO 12524 --- [io-8010-exec-10] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8764
    2017-12-17 21:08:53.511  INFO 12524 --- [nio-8010-exec-1] com.linyuan.controller.MovieController   : flim-user:linyuandembp:8763
    메모:Ribbon Configuration 클래스 는@ComponentScan 에서 검색 할 수 없습니다.그렇지 않 으 면 설정 정 보 는 모든@Ribbon Client 에서 공 유 됩 니 다.따라서 Ribbon 클 라 이언 트 의 설정 만 사용자 정의 하려 면@ComponentScan 에서 검색 되 는 것 을 방지 해 야 합 니 다.
    파일 방식 설정 리본
    설정 파일 을 통 해 리본 속성 을 사용자 정의 하 는 것 이 편리 합 니 다.설정 접 두 사 는.ribbon 입 니 다.
    NFLoadBalancer ClassName:ILoadBalancer 의 실현 클래스 를 설정 합 니 다NFLoadBalancer RuleClassName:IRule 의 구현 클래스 를 설정 합 니 다NFLoadBalancerPingClassName:IPing 구현 클래스 설정NIWSServerListClassName:ServerList 의 실현 클래스 를 설정 합 니 다NIWSServerListFilterClassName:ServerListFilter 의 실현 클래스 를 설정 합 니 다프로필 을 통 해 리본 설정 을 정의 합 니 다.
    
    flim-user:
     ribbon:
      NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    자주 사용 하 는 Ribbon 전역 설정
    
    ribbon:
      ConnectionTimeout: #      
      ReadTimeout: #      
      OkToRetryOnAllOperatotions: #            
      MaxAutoRetriesNextServer: #            
      MaxAutoRetries:  #          
      ServerListRefreshInterval:  #            
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기