Spring Cloud 부하 균형 기 리본 원리 및 실현
분산 식 시스템 에서 각 마이크로 서 비 스 는 여러 개의 인 스 턴 스 를 배치 할 것 이다.어떻게 서비스 소비 자 를 여러 서비스 제공 자의 인 스 턴 스 에 골 고루 분담 하 는 지 부하 이퀄 라이저 에 사용 해 야 한다.
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
{"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 에서 검색 되 는 것 을 방지 해 야 합 니 다.
파일 방식 설정 리본
설정 파일 을 통 해 리본 속성 을 사용자 정의 하 는 것 이 편리 합 니 다.설정 접 두 사 는
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: #
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.