리본 소개
분산 시스템에서 각 마이크로 서비스는 여러 인스턴스를 배포합니다. 서비스 소비자를 여러 서비스 제공 업체 인스턴스에 균등하게 배포하려면로드 밸런서를 사용해야합니다.
리본은로드 밸런서로 폴링과 같은 많은로드 밸런싱 알고리즘을 제공 한 다음 서비스 제공 업체 주소를 구성한 후 서비스 소비자 요청을 고르게 배포 할 수 있습니다.
리본을 통합하여 소비자에게 서비스를 제공합니다
리본 의존성 라이브러리를 추가하십시오
<pectionency> <groupid> org.springframework.boot </groupid> <artifactid> 스프링-부트 스타터-리보 브 </artifactid> </fectionency>
resttemplate 및 리본을 통합하기 위해 resttemplate에 @loadbalaced 주석을 추가하십시오.
@bean@loadbalancedpublic resttemplate resttemplate () {return new resttemplate ();}컨트롤러를 수정하고 요청 주소를 http : // flim-user/user/로 수정하십시오. 리본과 유레카가 함께 사용되면 가상 호스트 이름은 마이크로 서비스의 네트워크 주소에 자동으로 매핑되며로드 밸런서 클라이언트는 현재 선택된 마이크로 서비스 노드를 출력하도록 주입됩니다.
@RestControllerPublic 클래스 MovieController {private final logger log = loggerfactory.getLogger (moviecontroller.class); @autowired 개인 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 ()); }}테스트 프로그램을 실행하십시오
{ "id": 1, "username": "ac
http : // localhost : 8010/log-instance에 여러 번 액세스 할 때 다음 정보가 출력됩니다.
요청이 두 사용자 마이크로 서비스에 균등하게 배포 될 것임을 알 수 있습니다.
2017-12-17 20 : 47 : 53.975 정보 12313 --- [NIO-8010-Exec-2] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8764
2017-12-17 20 : 47 : 54.215 정보 12313 --- [NIO-8010-EXEC-1] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
2017-12-17 20 : 47 : 54.445 정보 12313 --- [NIO-8010-EXEC-3] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8764
2017-12-17 20 : 47 : 47 : 54.690 정보 12313 --- [NIO-8010-EXEC-4] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
2017-12-17 20 : 47 : 54.935 정보 12313 --- [NIO-8010-Exec-5] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8764
참고 : resttemplate.getForObject (...) 및 loadBalancerClient.Choose (...)는 동일한 방법으로 작성할 수 없습니다. REST-TEMPLATE는 실제로 리본 클라이언트이고 이미 "선택"동작을 포함하고 있기 때문입니다.
코드 별 리본 구성
Java 코드 또는 속성을 사용하여 리본 구성을 사용자 정의 할 수 있습니다. 리본의 기본 구성 클래스는 RibbonclientConfiguration이거나 Pojo를 사용하여 리본 구성을 사용자 정의 할 수 있습니다. 이 구성은 세분화되었습니다. 다른 리본 클라이언트는 다른 구성을 사용할 수 있습니다.
리본 구성 클래스를 만듭니다
/***이 클래스는 configuration 클래스*/ @configurationPublic Class RibbonConfiguration {@bean public irule ribbonrule () {// 구성로드 밸런싱 규칙, 랜덤 리턴 새 RandomRule ()로 변경; }}@RibbonClient 또는 @RibbonClients 주석을 사용하여 서비스 제공 업체의 구성 클래스 지정
@springbootApplication @enablediscoveryclient @ribbonclient (name = "flim-user", configuration = ribbonconfiguration.class) public class flimconsumerApplication {@bean @loadbalanced public resttemplate redtemplate () {return new rettemplate (); } public static void main (String [] args) {springApplication.run (flimconsumerApplication.class, args); }}테스트 주소 http : // localhost : 8010/log-instance를 방문하면 요청이 2 개의 마이크로 서비스에 무작위로 배포 될 것임을 알 수 있습니다.
2017-12-17 21 : 08 : 52.769 정보 12524 --- [NIO-8010-Exec-7] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
2017-12-17 21 : 08 : 52.946 정보 12524 --- [NIO-8010-Exec-8] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
2017-12-17 21 : 08 : 53.138 정보 12524 --- [NIO-8010-Exec-9] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
2017-12-17 21 : 08 : 53.319 정보 12524 --- [IO-8010-Exec-10] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8764
2017-12-17 21 : 08 : 53.511 정보 12524 --- [Nio-8010-Exec-1] com.linyuan.controller.moviecontroller : flim-user : linyuandembp : 8763
참고 : @componentscan은 ribbonConfiguration 클래스를 스캔 할 수 없으며, 그렇지 않으면 구성 정보가 모든 @RibbonClient에서 공유됩니다. 따라서 특정 리본 클라이언트의 구성 만 사용자 정의하려면 @componentscan에 의해 스캔되지 않도록해야합니다.
구성 파일에서 리본을 구성하십시오
구성 파일을 통해 리본 속성을 사용자 정의하는 것이 더 편리하며 구성 접두사는 <clientName> .Ribbon입니다.
구성 파일을 통해 리본 구성을 정의하십시오
flim-user : 리본 : nfloadbalancerRuleclassname : com.netflix.loadbalancer.randomrule
일반적으로 사용되는 리본 글로벌 구성
RIBBON : ConnectionTimeout : #connection timeout readtimeout : #Read TimeOut OKTORETRYONALLOPERATOTIONS : #RESTRY 모든 작업 요청 MAXAUTORETRIESNEXTSERVER : #스위치 서버 인스턴스 복장 maxAutorEtries : #RETRY 현재 인스턴스 ServerListRefreshInterval : #Reset Time 서비스 목록 소스를 새로 고침합니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.