Spring Cloud 시리즈 의 부하 균형 리본 예시 코드

1.1 소개
1.1.1 개술
  Ribbon 은 넷 플 릭 스 가 발표 한 부하 균형 기로 서 HTTP 와 TCP 클 라 이언 트 의 행동 을 제어 하 는 데 도움 이 된다.Ribbon 에 서비스 제공 자 주소 목록 을 설정 한 후에 Ribbon 은 특정한 부하 균형 알고리즘 을 바탕 으로 서비스 소비자 가 요청 할 수 있 도록 자동 으로 도와 줄 수 있 습 니 다.Ribbon 은 기본적으로 우리 에 게 많은 부하 균형 알고리즘 을 제공 했다.예 를 들 어 폴 링,랜 덤 등 이다.물론 Ribbon 에 게 사용자 정의 부하 균형 알고리즘 을 구현 할 수 있 습 니 다.Ribbon 은 현재 유지보수 상태 에 들 어 갔 지만 대규모 사용 중 입 니 다.Spring Cloud 는 LoadBalancer 를 Ribbon 의 교체 방안 으로 사용 하려 고 합 니 다.
1.1.2 관련 의존
  현재 의 등록 센터 가 Ribbon 을 도입 해 주 었 기 때문에 우 리 는 다시 도입 하지 않 아 도 직접 사용 할 수 있 습 니 다.물론 다시 도입 해도 영향 이 없습니다.
在这里插入图片描述

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
1.2 간단하게 사용
1.2.1 건설 프로젝트
eureka 프로젝트
1.2.2 부하 균형 오픈
  부하 균형 을 여 는 것 은 매우 간단 하 다.RestTemplate 의 설정 방법 에@LoadBalanced주 해 를 더 하면 가장 간단 한 폴 링 을 사용 할 수 있다.

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/29
 * @description       
 */
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
 public static void main(String[] args) {
  SpringApplication.run(ConsumerApplication.class, args);
 }
 
 @Bean
 @LoadBalanced
 public RestTemplate getRestTemplate() {
  return new RestTemplate();
 }
}
1.2.3 부하 균형 사용

/**
 * Created with IntelliJ IDEA.
 *
 * @author Demo_Null
 * @date 2020/10/29
 * @description
 */
@RestController
@RequestMapping("/consumer")
public class ConsumerController {

 @Autowired
 private DiscoveryClient discoveryClient;

 @Autowired
 private RestTemplate restTemplate;

 @GetMapping("/go")
 public void go() {
  List<ServiceInstance> providerServer = discoveryClient.getInstances("ProviderServer");

  if (0 == providerServer.size()) {
   return;
  }

  ServiceInstance serviceInstance = providerServer.get(0);
  String url = serviceInstance.getUri() + "/provider/get";
  System.out.println(url + " --- ");
  String str = restTemplate.getForObject(url, String.class);
  System.out.println(str);

 }
}
어허!잘못 보 고 했 습 니 다.분명히 방문 할 수 있 는데 왜 사례 를 찾 지 못 했 습 니까?이것 은 디 스 커버 리 클 라 이언 트 를 사용 하여 서비스 제공 자 클 러 스 터 의 특정한 주 소 를 직접 얻 은 다음 에 RestTemplate 에 부하 균형 을 맞 추 게 해 야 합 니 다.우 리 는 모두 정확 한 주 소 를 받 았 는데 어떻게 부하 균형 을 잡 습 니까?그래서 IP 를 사용 할 수 없습니다.서비스 이름 을 사용 해 야 합 니 다.
在这里插入图片描述
在这里插入图片描述

@RestController
@RequestMapping("/consumer")
public class ConsumerController {

 @Autowired
 private RestTemplate restTemplate;


 @GetMapping("/go")
 public void go() {
  String url = "http://ProviderServer/provider/get";

  String str = restTemplate.getForObject(url, String.class);
  System.out.println(str);
 }
}
수정 이 끝나 면 서비스 제공 자가 번갈아 서 비 스 를 제공 하 는 것 을 볼 수 있다.
在这里插入图片描述
1.3 부하 균형 정책 교체
1.3.1 자체 부하 균형 전략
在这里插入图片描述
정책 이름
정책 설명
RoundRobinRule
폴 링 선택 서버
RandomRule
임의의 serve 선택
RetryRule
먼저 폴 링 정책 에 따라 서 비 스 를 가 져 옵 니 다.서 비 스 를 가 져 오 는 데 실패 하면 지 정 된 시간 내 에 다시 시도 하여 사용 가능 한 서 비 스 를 가 져 옵 니 다.
BestAvailableRule
여러 번 의 방문 고장 으로 인해 차단기 스위치 상태 에 있 는 서 비 스 를 먼저 걸 러 낸 다음 에 병발 량 이 가장 적은 서 비 스 를 선택 합 니 다.
AvailabilityFilteringRule
고장 인 스 턴 스 를 우선 필터 하고 작은 인 스 턴 스 를 선택 합 니 다.
WeightedResponseTimeRule
폴 링 의 확장,응답 속도 가 빠 른 인 스 턴 스 선택 비중 이 클 수록 선택 하기 쉽다.
ZoneAvoidanceRule
서버 가 있 는 지역 의 성능 과 서버 의 가용성 을 복합 적 으로 판단 하 는 서버
1.3.2 설정 클래스 사용
  공식 문 서 는 이 사용자 정의 설정 류 는@Componedtscan 이 검색 한 현재 가방 과 하위 가방 에 넣 을 수 없다 고 명확 하 게 경고 합 니 다.그렇지 않 으 면 우리 가 사용자 정의 한 이 설정 류 는 모든 Ribbon 클 라 이언 트 에 의 해 공 유 됩 니 다.즉,Spring Boot 메 인 프로그램 에서 스 캔 한 가방 외 에 설정 류 를 정의 하거나 Spring Boot 메 인 프로그램 과 같은 단계 의 디 렉 터 리 에서 스 캔 을 제외 합 니 다.설정 클래스 생 성 완료 후 Spring Boo 메 인 프로그램 에@RibbonClient 주 해 를 추가 하여 설정 클래스 를 도입 합 니 다.name 속성 으로 호출 된 서비스 이름 을 지정 하고 configuration 속성 은 사용자 정의 설정 클래스 를 지정 합 니 다.

@Configuration
public class MyRibbonRule {

 @Bean
 public IRule ribbonRule() {
  return new RandomRule();
 }
}

@SpringBootApplication
@EnableDiscoveryClient
//   name           ,configuration         
@RibbonClient(name = "ProviderServer", configuration = MyRibbonRule.class)
public class ConsumerApplication {

 public static void main(String[] args) {
  SpringApplication.run(ConsumerApplication.class, args);
 }

 @Bean
 @LoadBalanced
 public RestTemplate getRestTemplate() {
  return new RestTemplate();
 }
}
在这里插入图片描述
1.3.3 프로필

#              
#          ,        
ProviderServer:
 ribbon:
 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
在这里插入图片描述
소스 코드
스프링 클 라 우 드 시리즈 의 부하 균형 리본 에 관 한 예시 코드 에 관 한 글 은 여기까지 입 니 다.스프링 클 라 우 드 부하 균형 리본 에 관 한 더 많은 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기