클라이언트를 균형 리본로드 : 봄 클라우드 튜토리얼 (V)를 시작하기
서비스가 수행 할 수 없었다 우리의 서비스에 대한 액세스의 양이, 안녕하세요 세계 서지 경우 우리가 안녕하세요 서비스 클러스터를 만들 수 있습니다, 섹션을 연결합니다.
원본 포트 8762이 8763으로 변경하면서 매우 간단합니다, 우리는, 안녕하세요 세계 서비스를 복사해야합니다. 봄 부팅 모두 다음 응용 프로그램을 시작, 두 안녕하세요 서비스를받을 수 있습니다. 모두 안녕하세요 세계는 유레카 서비스 센터에 등록되어 있습니다. 이 시간은 HTTP를 방문 : // localhost를 : 8761, 두 안녕하세요 세계 서비스가 등록되어 볼 수 있습니다. (등록 서비스 및 참조 : 서비스 등록 봄 클라우드 시작 튜토리얼 (A)를 ).
1. 클라이언트로드 밸런싱
로드 밸런싱 서버와 클라이언트로드 밸런싱로드 밸런싱으로 나눌 수 있습니다, 서버로드 밸런싱 서버에 의해 처리되므로, 클라이언트는 아무것도 할 필요가 없습니다. 클라이언트로드 밸런싱 기술은 클라이언트가 서버 참조의 집합을 유지하기 위해 필요, 클라이언트가 서버에 요청을 보낼 때마다 자동으로 알고리즘에 따라 서비스 노드를 선택합니다. 일반적인로드 밸런싱 알고리즘 : 라운드 로빈, 랜덤, 해시, 등등 StaticWeighted하고 .
리본 + 편안하고 척하기 : 봄은 서비스 스케줄링 두 종류를 제공합니다. 리본 리본은 HTTP 및 TCP 클라이언트에 대한 제어를 많이 제공하고, 클라이언트 기반의로드 밸런서이다.
내부 척하기는 너무 오래 사용 @FeignClient 노트로,이 장의 내용도 적용 할 수있는, 리본을 사용.
여기에 봄 클라우드 리본이 헬로 월드 서비스로드 밸런싱을 달성하는 방법 방법에 대해 살펴입니다. 다음은 리본 봄 클라우드 클라이언트로드 밸런싱 아키텍처 다이어그램이다.
안녕하세요 세계 서비스와 리본은 서비스 센터에 등록
서비스 안녕하세요 프로젝트는 restTemplate에 의해 호출 된 서비스 Hellowworld 인터페이스 sercvice - 리본, 리본로드 밸런싱의 사용에 전화를 번갈아 것이다 각각 8762,8763 포트가 서비스 레지스트리에 등록 된 두 개의 사본, 출마 안녕하세요 세계는 두 개의 서로 다른 포트를 제공
2. 리본 서비스 만들기
1) 리본 서비스라는 Maven 프로젝트 생성, 다음과 같이 pom.xml 파일을 :
2) 메인 클래스 만들기 ServiceRibbonApplication을
1 개 패키지 springcloud.helloworld.ribbon.service; 2 세 수입 org.springframework.boot.SpringApplication; 4 수입 org.springframework.boot.autoconfigure.SpringBootApplication; 5 수입 org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 가져 오기 org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 수입 org.springframework.context.annotation.Bean; 8 수입 org.springframework.web.client.RestTemplate; 9 10 @SpringBootApplication 11 @EnableDiscoveryClient 12 개 공용 클래스 ServiceRibbonApplication { 13 14 공공 정적 무효 메인 (문자열 []에 args) { 15 SpringApplication.run (ServiceRibbonApplication.class, 인수); 16} 17 18 @Bean 19 @LoadBalanced {20 템플릿 잔류 나머지 템플릿을 () (21) 반환 새로운 템플릿 나머지 (); 22} 23}
@EnableDiscoveryClient 서비스 센터에 등록, 그리고의 restTemplate라는 빈을 등록했다.
@ LoadBalanced 등록이 restRemplate이 할 필요가 있음을 보여준다는로드 밸런싱입니다.
3) 안녕하세요 획득 한 콘텐츠 서비스 클래스를 가져옵니다 만들기
1 개 패키지 springcloud.helloworld.ribbon.client; 2 세 가져 오기 org.springframework.beans.factory.annotation.Autowired; 4 수입 org.springframework.stereotype.Service; 5 수입 org.springframework.web.client.RestTemplate; 6 7 @Service 8 공용 클래스의 HelloService { 9 @Autowired RestTemplate restTemplate; (10) (11) 공공 문자열 getHelloContent () { 12 반환 restTemplate.getForObject (에 "http : // 서비스-helloworld를 /", String.class); 13} 14}
여기에 키 코드는, restTemplate.getForObject 방법은 자동으로 리본로드 밸런싱 메커니즘을 통과 헬로 워드 서비스를 선택합니다,
서비스 센터에 등록 된 서비스-helloworld를 안녕하세요 세계 서비스의 이름, 두 개의 서비스-을 HelloWorld가 : 여기에 URL "// 서비스-helloworld를 / HTTP"입니다. 따라서,이 호출은로드 밸런싱 알고리즘을 기반으로 서비스-helloworld를 서비스로 서버를 선택하는 클라이언트로 리본 서비스는 본질적이다. 그리고 진정한 소명을 수행하기 위해 선택한 서비스-helloworld를 안녕하세요에게 세계를 방문하십시오.
리본 서비스 응용 프로그램을 시작합니다 3. 우리는 HTTP를 방문 할 수 있습니다 : // localhost를 : 8901 /, 각 새로 고침는 다음과 같은 두 가지 결과가 번갈아 나타납니다 다른 포트의 실제 호출입니다 서로 다른 서비스-helloworld를 보여 볼 수 있습니다.
서비스가 수행 할 수 없었다 우리의 서비스에 대한 액세스의 양이, 안녕하세요 세계 서지 경우 우리가 안녕하세요 서비스 클러스터를 만들 수 있습니다, 섹션을 연결합니다.
원본 포트 8762이 8763으로 변경하면서 매우 간단합니다, 우리는, 안녕하세요 세계 서비스를 복사해야합니다. 봄 부팅 모두 다음 응용 프로그램을 시작, 두 안녕하세요 서비스를받을 수 있습니다. 모두 안녕하세요 세계는 유레카 서비스 센터에 등록되어 있습니다. 이 시간은 HTTP를 방문 : // localhost를 : 8761, 두 안녕하세요 세계 서비스가 등록되어 볼 수 있습니다. (등록 서비스 및 참조 : 서비스 등록 봄 클라우드 시작 튜토리얼 (A)를 ).
1. 클라이언트로드 밸런싱
负载均衡可分为服务端负载均衡和客户端负载均衡,服务端负载均衡完全由服务器处理,客户端不需要做任何事情。而客户端负载均衡技术,客户端需要维护一组服务器引用,每次客户端向服务端发请求的时候,会根据算法主动选中一个服务节点。常用的负载均衡算法有: Round Robbin, Random,Hash,StaticWeighted等。
Spring 提供两辆种服务调度方式:Ribbon+restful和Feign。Ribbon就是一个基于客户端的负载均衡器, Ribbon提供了很多在HTTP和TCP客户端之上的控制.
Feign内部也已经使用了Ribbon, 所以只要使用了@FeignClient注解,那么这一章的内容也都是适用的。
下面就看看如何Spring Cloud如何用Ribbon来实现两个Hello World服务的负载均衡。以下是Spring cloud的ribbon客户端负载均衡架构图。
hello world服务和ribbon均注册到服务中心
service-hi工程跑了两个副本,端口分别为8762,8763,分别向服务注册中心注册, 当sercvice-ribbon通过restTemplate调用service-Hellowworld的接口时,利用用ribbon进行负载均衡,会轮流的调用处于两个不同端口的Hello world服务
2. 创建一个Ribbon服务
1) 创建一个maven工程,取名叫service-ribbon, pom.xml文件如下:
2). 创建主类ServiceRibbonApplication
1 package springcloud.helloworld.ribbon.service; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 import org.springframework.cloud.client.loadbalancer.LoadBalanced; 7 import org.springframework.context.annotation.Bean; 8 import org.springframework.web.client.RestTemplate; 9 10 @SpringBootApplication 11 @EnableDiscoveryClient 12 public class ServiceRibbonApplication { 13 14 public static void main(String[] args) { 15 SpringApplication.run(ServiceRibbonApplication.class, args); 16 } 17 18 @Bean 19 @LoadBalanced 20 RestTemplate restTemplate() { 21 return new RestTemplate(); 22 } 23 }
@EnableDiscoveryClient向服务中心注册,并且注册了一个叫restTemplate的bean。
@ LoadBalanced注册表明,这个restRemplate是需要做负载均衡的。
3). 创建获取一个获取Hello内容的service类
1 package springcloud.helloworld.ribbon.client; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Service; 5 import org.springframework.web.client.RestTemplate; 6 7 @Service 8 public class HelloService { 9 @Autowired RestTemplate restTemplate; 10 11 public String getHelloContent() { 12 return restTemplate.getForObject("http://SERVICE-HELLOWORLD/",String.class); 13 } 14 }
这里关键代码就是, restTemplate.getForObject方法会通过ribbon负载均衡机制, 自动选择一个Hello word服务,
서비스 센터에 등록 된 서비스-helloworld를 안녕하세요 세계 서비스의 이름, 두 개의 서비스-을 HelloWorld가 : 여기에 URL "// 서비스-helloworld를 / HTTP"입니다. 따라서,이 호출은로드 밸런싱 알고리즘을 기반으로 서비스-helloworld를 서비스로 서버를 선택하는 클라이언트로 리본 서비스는 본질적이다. 그리고 진정한 소명을 수행하기 위해 선택한 서비스-helloworld를 안녕하세요에게 세계를 방문하십시오.
리본 서비스 응용 프로그램을 시작합니다 3. 우리는 HTTP를 방문 할 수 있습니다 : // localhost를 : 8901 /, 각 새로 고침는 다음과 같은 두 가지 결과가 번갈아 나타납니다 다른 포트의 실제 호출입니다 서로 다른 서비스-helloworld를 보여 볼 수 있습니다.