リボンの紹介
分散システムでは、各マイクロサービスが複数のインスタンスを展開します。サービス消費者を複数のサービスプロバイダーインスタンスに均等に配布する方法には、ロードバランサーの使用が必要です。
リボンはロードバランサーであり、ポーリングなどの多くの負荷分散アルゴリズムを提供し、サービスプロバイダーアドレスを構成した後、サービス消費者のリクエストを均等に配布できます。
リボンを統合して消費者にサービスを提供します
リボン依存関係ライブラリを追加します
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-ribbobn </artifactid> </dependency>
@loadbalacedアノテーションをレイトテンプレートに追加して、rettemplateとリボンを統合します
@bean@loadbalancedpublic resttemplate resttemplate(){return new resttemplate();}コントローラーを変更し、リクエストアドレスをhttp:// flim-user/user/に変更します。リボンとユーレカを一緒に使用すると、仮想ホスト名がマイクロサービスのネットワークアドレスに自動的にマッピングされ、ロードバルアクレントが注入され、現在選択されているマイクロサービスノードが出力されます。
@RestControllerPublicクラスMOVIECONTROLLER {プライベートファイナルロガーlog = loggerFactory.getLogger(moviecontroller.class); @autowired privateRestemplateStemplate; @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 inverinstance = this.loadbalancerclient.choose( "flim-user"); log.info( "{}:{}:{}"、serviceInstance.getServiceId()、serviceInstance.gethost()、serviceInstance.getport()); }}テストプログラムを実行します
{"id":1、 "username": "account1"、 "name": "zhang san"、 "age":20、 "balance":100.00}
http:// localhost:8010/log-instanceに複数回アクセスすると、次の情報が出力されます。
リクエストは2つのユーザーマイクロサービスに均等に配布されることがわかります
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 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情報12313 --- [NIO-8010-EXEC-5] com.linyuan.controller.moviecontroller:flim-user:linyuandembp:8764
注:RESTTEMPLATE.GETFOROBJECT(...)およびLoadBalancerClient.Choose(...)は同じ方法で記述することはできません。レストテンプレートは実際にはリボンクライアントであり、それ自体にすでに「選択」動作が含まれているからです。
コードごとにリボンの構成
Javaコードまたは属性を使用して、リボン構成をカスタマイズできます。リボンのデフォルトの構成クラスはリボンクライアント構成です。または、POJOを使用してリボン構成をカスタマイズできます。この構成はきめ細かく密集しています。異なるリボンクライアントは、異なる構成を使用できます。
リボン構成クラスを作成します
/***このクラスは構成クラスです* Componentscanによってスキャンしないでください*/ @configurationpublic class ribbonconfiguration {@bean public irule ribbonrule(){// configurationロードバランシングルール、ランダム戻りnew randomRule(); }}@ribbonclientまたは@ribbonclientsアノテーションを使用して、サービスプロバイダーの構成クラスを指定します
@springbootapplication @enablediscoveryclient @ribbonclient(name = "flim-user"、configuration = ribbonconfiguration.class)public class flimconsumerApplication {@bean @loadbalanced public repttemplate estemplate(){return new resttemplate(); } public static void main(string [] args){springApplication.run(flimconsumerApplication.class、args); }}テストアドレスhttp:// localhost:8010/log-instanceにアクセスすると、リクエストが2つのマイクロサービスにランダムに配布されることがわかります。
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情報12524 --- [NIO-8010-EXEC-1] com.linyuan.controller.moviecontroller:flim-user:linyuandembp:8763
注:ribbonConfigurationクラスは@componentscanでスキャンすることはできません。そうしないと、構成情報はすべての@RibbonClientによって共有されます。したがって、特定のリボンクライアントの構成のみをカスタマイズする場合は、@componentsCanによってスキャンされないようにする必要があります。
構成ファイルでリボンを構成します
構成ファイルを介してリボンプロパティをカスタマイズする方が便利で、構成プレフィックスは<clientName> .Ribbonです。
構成ファイルを介してリボン構成を定義します
Flim-User:リボン:nfloadbalancerruleclassname:com.netflix.loadbalancer.randomrule
一般的に使用されるリボングローバル構成
リボン:ConnectionTimeOut:#Connection Timeout ReadTimeOut:#Read TimeOut OKTORETRYONALLOPERATOTIONS:#retryすべての操作要求maxautoretriesnextServer:#switch serverインスタンスはmaxautoretriesを取得します:#retry
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。