열기
이 예제는 H2 메모리 데이터베이스를 통합하고 단위 테스트 및 데이터베이스 독립성을 실현하고 RestTemplate를 사용하여 Spring Boot의 RESTful 서비스를 소비하는 SpringBoot를 기반으로합니다.
RestTemplate를 사용하여 Spring Boot를 사용하는 RESTFUL SERVICE 예제에서 Spring Boot Service를 호출 할 때 서비스 URL을 구성 파일에 작성해야하지만이 두 가지 메소드 중 어느 쪽이든 IP 주소가 변경되면 프로그램을 변경하고 서비스를 재배치해야한다고 언급했습니다. 리본을 사용할 때는이 문제를 효과적으로 피할 수 있습니다.
머리말:
소프트로드 밸런싱을 구현하는 두 가지 방법, 즉 서버에서로드 밸런싱 및 클라이언트의로드 밸런싱이 있습니다.
서버 측로드 밸런싱 : 브라우저가 백그라운드에 요청을 발행하면 먼저 리버스 프록시 서버에 요청을 보냅니다. 리버스 프록시 서버는 IP : 포트 매핑 테이블 및 클라이언트가 배포 한로드 밸런싱 정책을 기반으로 요청을 보낼 서버를 결정합니다. 일반적으로 Nginx 역 프록시 기술이 사용됩니다.
클라이언트로드 밸런싱 : 브라우저가 백그라운드에 요청을 할 때 클라이언트는 서버에 등록 된 사용 가능한 서비스 정보를 서비스 등록자 (예 : Eureka Server)로 가져온 다음로드 밸런싱 정책에 따라 요청을 보낸 서버를 직접 적용합니다. 이 전체 프로세스는 클라이언트 측에서 수행되며 리버스 프록시 서버의 참여가 필요하지 않습니다.
1. 유레카 서버를 시작하십시오
이 예를 참조하십시오 : Spring Cloud에서 Eureka Server 시작
2. 마이크로 서비스를 시작하고 Eureka Server에 등록하십시오
스프링 클라우드 - 스프링 부트 서비스 등록 유레카 서버
로드 밸런싱의 영향을 입증하려면 다른 서비스를 시작하려면 포트 번호를 일관성없는 것으로 변경해야합니다.
3. 리본 지지대를 추가하십시오
1. 리본의 종속성을 추가하십시오
2.로드 밸런싱 지원을 추가하십시오
패키지 com.chhliu.springboot.restful; org.springframework.beans.factory.annotation.autowired; org.springframework.boot.springApplication import; org.springframework.boot.autoconfigure.springbootapplication import; org.springframework.boot.web.client.resttemplatebuilder; org.springframework.cloud.client.loadbalancer.loadbalanced; org.springframework.cloud.netflix.eureka.enableeurekaclient; import org.springframework.context.annotation.bean; import org.springframework.web.client.resttemplate; @SpringBootApplication @enableEureKaclient Public Class SpringBootRestTemplateApplication {@autowired private resttemplatebuilder builder; @bean @loadbalanced //로드 밸런싱 지원 추가는 매우 간단합니다. @loadbalanced 주석을 resttemplate에 추가하면됩니다. 그런 다음 resttemplate에는로드 밸런싱 기능이 있습니다. @loadbalanced 주석이 추가되지 않으면 java.net.unknownhostexception : SpringBoot-H2 예외 가보고됩니다. 현재 Eureka Server에 서비스 이름을 등록하면 서비스를 호출 할 수 없습니다. RestTemplate은 서비스 이름에서 IP : Port에 매핑 할 수 없으며 LoadBalancerClient에서 매핑 함수를 구현할 수 있기 때문입니다. public resttemplate resttemplate () {return builder.build (); } public static void main (string [] args) {springApplication.run (springbootrestTemplateApplication.class, args); }} 3. 호출 마이크로 서비스의 URL을 수정하십시오
패키지 com.chhliu.springboot.restful.controller; org.springframework.beans.factory.annotation.autowired; org.springframework.web.bind.annotation.getMapping; import org.springframework.web.bind.annotation.pathvariable; org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.resttemplate; import com.chhliu.springboot.restful.vo.user; @RestController Public Class RestTemPlateController {@autowired private resttemplate resttemplate; @GetMapping ( "/template/{id}") public user findById (@PathVariable Long ID) {// 원래 IP 변경 : 포트 양식을 Eureka Server 사용자 U = this.RestTemplate.getForObject에 등록한 응용 프로그램 이름으로 변경합니다 ( "http : // springboot-h2/user/" + id, user.class); System.out.println (u); u; }}4. 유레카 서버의 상태를 확인하십시오
5. 브라우저에서 http : // localhost : 7904/template/2 주소를 여러 번 새로 고침
6. 테스트 결과
7900 포트 서비스 :
Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : user0_.id를 id1_0_0_, user0_.balance as balance3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ 여기서 user0_.id =?
7901 포트 서비스 :
Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan Hibernate : user0_.id를 id1_0_0_, user0_.balance as balance3_0_0_, user0_.name as name4_0_0_, user0_.username as username5_0_0_ 여기서 user0_.id =? Hibernate : id1_0_0_, user0_.age as age2_0_0_, user0_.balance as balan
7904 포트 서비스 :
user [id = 2, username = user2, name = li si, age = 20, balance = 100.00] 2017-01-23 09 : 58 : 05.682 정보 7436 --- [erlistupdater-0] c.netflix.config.chaineddynamicproperty : 플리핑 속성 : Springboot-h2.ribbon. niws.loadbalancer.availabilityFilteringRule.ActiveConnectionSlimit = 2147483647 사용자 [id = 2, username = user2, name = li si, age = 20, balance = 100.00] user [id = 2, username = user2, name = li si, age = 20, balance = 100.00] 사용자 [id = user2, use = 20, username = 2, username = 2, username = 밸런스 = 100.00] 사용자 [id = 2, username = user2, name = li si, age = 20, balance = 100.00] 사용자 [id = 2, username = user2, name = li si, age = 20, balance = 100.00] 사용자 [id = 2, username = user2, user2, name = li si = 20, username = 2, username. Balance = 100.00] 사용자 [id = 2, username = user2, name = li si, age = 20, balance = 100.00]
위의 테스트 결과에서 총 7904 개의 포트 서비스가 9 회 조정되었으며 그 중 7904 포트 서비스가 4 회 조정되었고 7901 포트가 5 회 조정되었으며 이는 정확히 9 회 조정되었습니다.
위의 단계 후에는 리본이 기본적으로 클라이언트로드 밸런싱 함수를 실현하는 데 사용됩니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.