リボン負荷分散クライアント:春の雲は、チュートリアル(V)はじめに
当社のサービスへのアクセス量がサービスと、こんにちはサージ場合は、セクションを接続することは、我々はHello Worldのサービスクラスタを作ることができ、持ち運びすることができませんでした。
元のポート8762を8763に変更しながら、非常に単純な、我々は唯一、こんにちは、世界のサービスをコピーする必要があります。そして、両方の春ブートアプリケーションを起動し、次の2つのHello Worldのサービスを受けることができます。どちらこんにちは、世界はユーレカサービスセンターに登録されています。今回は、httpを訪問する:// localhostを:8761、次の2つのハローワールドサービスが登録されている見ることができます。(登録サービスと参照してください:サービス登録春クラウドスタートチュートリアル(A)を)。
1.クライアント・ロード・バランシング
ロードバランシングは、サーバとクライアントの負荷分散、負荷分散に分けることができ、サーバロードバランシングがサーバによって完全に処理され、クライアントには何もする必要はありません。クライアントの負荷分散技術は、クライアントがサーバの参照のセットを維持する必要がある、クライアントがサーバに要求を送信したすべての時間は、自動的にアルゴリズムに従ってサービスノードを選択します。一般的なロードバランシングアルゴリズム: ラウンドロビン、ランダム、ハッシュ、その上StaticWeightedと。
リボン+安らかと装う:春は、サービススケジューリングの2種類が用意されています。リボンは、リボンはHTTPとTCPクライアント上のコントロールの多くを提供し、クライアントベースのロードバランサです。
内部装うも使用@FeignClientノートほど長いリボンを、使用されて、この章の内容も適用可能です。
ここでは、2つのHello World Serviceのロードバランシングを実現する方法をどのように春のクラウドリボンを見てです。以下は、リボン春のクラウドクライアントの負荷分散アーキテクチャ図です。
Hello Worldのサービスとリボンは、サービスセンターに登録されています
サービス-HIプロジェクトはrestTemplateによって呼び出されたサービスHellowworldインタフェースsercvice-リボンは、リボンでロードバランシングを使用するには、中に呼び出すためにターンを取るそれぞれ、8762,8763ポートがサービスレジストリに登録された2つのコピー、走りましたこんにちは、世界は2つの異なるポートにサービスを提供します
2.リボンのサービスを作成します。
1)リボン・サービスという名前のMavenプロジェクトの作成、次のように、pom.xmlファイルを:
2)主クラスを作成ServiceRibbonApplicationを
1つのパッケージspringcloud.helloworld.ribbon.service。 2 3インポート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のpublic static無効メイン(文字列[] args){ 15 SpringApplication.run(ServiceRibbonApplication.class、引数)。 16} 17 18 @Bean 19は@LoadBalanced 20テンプレート残留残りテンプレート(){ 21リターン新しいテンプレートレストを()。 22} 23}
@EnableDiscoveryClientサービスセンターへの登録、およびのrestTemplateと呼ばれる豆を登録。
@ロードバランスの登録は、このrestRemplateがする必要があることを示して負荷分散です。
3)こんにちは、取得したコンテンツサービスクラスを取得作成
1つのパッケージspringcloud.helloworld.ribbon.client。 2 3インポート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:// SERVICE-のHelloWorld /"、String.class)。 13} 14}
ここでキーコードが、restTemplate.getForObject方法は、こんにちはワードサービスを選択し、自動的にリボン負荷分散メカニズムを渡します
ここでURLは "http:// SERVICE-のHelloWorld /" され、こんにちはサービスSERVICE-のHelloWorldの名前で、サービスセンターへの登録には、2つのサービス-のHelloWorldを持っています。そのため、この呼び出しはロードバランシングアルゴリズムに基づいてSERVICE-のHelloWorldサービスとしてサーバを選択するために、クライアントと本質的にリボンのサービスです。そして、真の呼び出しを実行するためにこんにちは、世界を選択SERVICE-のHelloWorldをご覧ください。
リボン・サービス・アプリケーションを起動します。3.、私たちはHTTPを訪問することができます:// localhostを:8901 /、その後、各リフレッシュは、次の2つの結果が交互に表示される別のポートでの実際の呼び出しで異なるSERVICE-のHelloWorldを表示見ることができます。
当社のサービスへのアクセス量がサービスと、こんにちはサージ場合は、セクションを接続することは、我々はHello Worldのサービスクラスタを作ることができ、持ち運びすることができませんでした。
元のポート8762を8763に変更しながら、非常に単純な、我々は唯一、こんにちは、世界のサービスをコピーする必要があります。そして、両方の春ブートアプリケーションを起動し、次の2つのHello Worldのサービスを受けることができます。どちらこんにちは、世界はユーレカサービスセンターに登録されています。今回は、httpを訪問する:// localhostを:8761、次の2つのハローワールドサービスが登録されている見ることができます。(登録サービスと参照してください:サービス登録春クラウドスタートチュートリアル(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服务,
ここでURLは "http:// SERVICE-のHelloWorld /" され、こんにちはサービスSERVICE-のHelloWorldの名前で、サービスセンターへの登録には、2つのサービス-のHelloWorldを持っています。そのため、この呼び出しはロードバランシングアルゴリズムに基づいてSERVICE-のHelloWorldサービスとしてサーバを選択するために、クライアントと本質的にリボンのサービスです。そして、真の呼び出しを実行するためにこんにちは、世界を選択SERVICE-のHelloWorldをご覧ください。
リボン・サービス・アプリケーションを起動します。3.、私たちはHTTPを訪問することができます:// localhostを:8901 /、その後、各リフレッシュは、次の2つの結果が交互に表示される別のポートでの実際の呼び出しで異なるSERVICE-のHelloWorldを表示見ることができます。