1.Ribbon、装う関連の発表
リボンは、プロセッサの負荷分散され、そこに、我々microServiceはあなたが通信アドレスを介して他のマイクロサーバにアクセスすることができ、レジストリを介して、通信リストをプルする際に、他のマイクロサーバは、クラスタをすれば、リボンはspringcloudの構成部品でありますマイクロ複数のサービス、全てがマイクロサービスを訪問するために行った場合、エンドマイクロサービスでは、我々は、それをアクセスし、そのサービスがアクセスされるマイクロので、サーバーや爆発にアクセスするかもしれない、あまりにも多くのスレッド、他のサーバーが、アイドル中、私たちは、私たちはこれらの要求に対処する助け、助け、私たちのこれらの要求の合理的な配分にロードバランサに必要である、リボンはこの役割である、リボンのデフォルトはポーリング要求処理、ならびにランダム、一貫性のあるハッシュとして他のもので、これはそう、加重やり方はディストリビューションを要求しました。
リボンに基づいてプロセッサの負荷分散も装う、リボンは、HTTPとTCPクライアントのバランスをとるツールベースの負荷があります。
これは、クライアントRibbonServerList(サーバリスト)で構成、またはHttpClientをRestTemplateアナログHTTP要求、手順を使用して、かなり面倒であることができます。
装う
装うがリボンに基づいて改善され、HTTPクライアントを使用する方が便利です。
インタフェースとして、唯一のあなたは、あなたは上記の注釈を追加することができ、インターフェイスを作成する必要があり、この方法は、他のサービスを呼び出す必要があります抽象メソッドとして定義され、自分自身のHTTPリクエストを構築する必要はありません。
その後、自身が呼び出し元のように動作し、かつフィーリングがリモートメソッドを呼び出すことでメソッドを呼び出して、クライアントが非常に簡単に書くことができます。
ステップ2.コードの実装リボン
1.輸入依存度
< 依存性> < のgroupId > org.springframework.cloud </ のgroupId > < たartifactId >ばねクラウドスタータNetflixのリボン</ たartifactId > </ 依存>
2.ノートはリターンrestTemplate Beanのメソッドにマークされ、注釈がrestTemplateロードバランシングを持ってすることができます@LoadBalanced
@Configuration パブリック クラス{BeanConfig / ** * @LoadBalancedは能力のバランスを取るリボンrestTemplate負荷になります注意事項を打った後、 * @return * / @Bean @LoadBalanced 公共RestTemplate restTemplate(){ 返す 新しい新しいRestTemplateを(); } }
コントローラ呼び出し方法変更
@GetMapping( "/順序/ {ID}" ) 公共化するJsonResult queryById(@PathVariableロングID){ // 使用restTemplate发送HTTP协议 文字列のURL = "HTTP:// userclient / userclient /ユーザ/" + ID。 ユーザーユーザー = template.getForObject(URL、ユーザークラス)。 化するJsonResult化するJsonResult = 新化するJsonResult(); jsonResult.setData(ユーザ)。 返却するJsonResultを。 }
ステップ3装うためのコード
1.輸入依存度
< 依存性> < のgroupId > org.springframework.cloud </ のgroupId > < たartifactId >ばねクラウドスタータopenfeign </ たartifactId > </ 依存>
2.書き込み装うインターフェース
/ ** *書き込み装うインターフェースユーザー・クライアントは、登録センターは、登録されたアプリケーション名 * / @FeignClient(値 =「ユーザクライアント」) のパブリック インターフェイスUserFeignClient { / ** * @PathVariableに(「上記のID上」)が書き込まれなければなりません"ID"、さもなければ、注射できないUserFeignClient * @paramのID * @return * / userclient /ユーザー/ {ID}は、サーバー・パス・リソースは、コールサーバに必要 * / @GetMapping( "/ userclient /ユーザー/ {ID}" ) ユーザ(@PathVariable(queryById "ID" )ロングIDを); }
3. [メイン設定クラス装う@ EnableFeignClients(「cn.learn.springcloud.feignclient」)
/ ** * @EnableFeignClients( "cn.learn.springcloud.feignclient")主配置类开启fenign * / @SpringBootApplication @EnableFeignClients( "cn.learn.springcloud.feignclient" ) パブリック クラスOrderClientApplication { 公共 静的 ボイドメイン(文字列[ ]引数){ SpringApplication.run(OrderClientApplication。クラス)。 } }
メソッドを呼び出す4.controller注入層インターフェイス
@RestController @RequestMapping( "/ orderclient" ) パブリック クラスUserControllerで{ @Autowired プライベートUserFeignClient userFeignClient。 (@GetMapping "/順序/ {ID}" ) パブリックユーザqueryById(@PathVariableロングIDを){ // 调用ふり的接口的方法 ユーザーユーザー= userFeignClient.queryById(ID)。 リターンユーザー; } }
3.Hystrix関連プレゼンテーション
hystrix機構を融合するために使用されるフレームワークですが、他のマイクロハングあれば、ないの訪問へのサービスは、それが原因、アバランシェ効果が発生しますときのコンポーネントに属しマイクロレジストリを通じてアクセスする他のサービスへの私たちの悪いサービスときにspringcloud他のサーバーの麻痺サーバーがハング、我々はマイクロアバランシェ効果と呼んで他のサービスのマイクロサービス麻痺の現象によって引き起こされ、このような麻痺は、この問題を解決するために、私たちはこの問題を解決するためのヒューズ機構hystrixのヘルプを導入springcloudあなたがアクセス権を持っていない、ハングアップされているサーバにアクセスする場合の後、我々は通常の友好のヒントに戻り、マイクロサービスを教えて、このサーバーが故障している、このサーバーをハングアップする際に隔離されているように、その後、なしそれはあなたがアクセスしたいサーバーの麻痺を引き起こす可能性があり、サーバは、他のサーバーの稼働時間をハングアップすることを確実にするために。
リボンhystrixで3.1の統合
1.輸入依存度
< 依存性> < のgroupId > org.springframework.cloud </ のgroupId > < たartifactId >ばねクラウドスタータのNetflix-hystrix </ たartifactId > </ 依存>
2.一次ヒューズ機構開放構成クラス@EnableCircuitBreaker
/ ** * @EnableCircuitBreaker开启熔断机制 * / @SpringBootApplication @EnableCircuitBreaker パブリック クラスOrderClientApplication { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(OrderClientApplication。クラス)。 } }
データサービスへのアクセスがない場合3.戻り化するJsonResult道に優しいヒントは、我々は法に音符を演奏し、メソッドが返す結果の下部をドラッグする戻る@HystrixCommand(fallbackMethod =「getUserByIdFallback」)
注:パラメータは、メソッドを支える、元と一貫した方法に結果を返します
@RestController @RequestMapping( "/ OrderClient" ) のパブリック クラスUserControllerで{ @Autowired プライベートRestTemplateテンプレート; / ** * @HystrixCommand(fallbackMethod = "getUserByIdFallback")、下ドラッグメソッドタブマーク * @paramのID * @return * / @HystrixCommand (fallbackMethod = "getUserByIdFallback" ) @GetMapping( "/注文/ {ID}" ) 公共化するJsonResult queryById(ロング@PathVariable ID){ // 送信restTemplateに使用するHTTPプロトコル 文字列のURL =「HTTP:// userclient / userclient / ユーザー/ "+ID; ユーザーユーザー = template.getForObject(URL、ユーザー。クラス); するJsonResult化するJsonResult = 新新化するJsonResult(); jsonResult.setData(ユーザー); リターンするJsonResult; } / ** *ダウングレード方法、もしユーザがクライアントにアクセスできませんドラッグ下のデータ復帰方法 * / 公共化するJsonResult getUserByIdFallback(ロング@PathVariable ID){ 化するJsonResult化するJsonResult = 新新化するJsonResult(); jsonResult.setSuccess(falseに); jsonResult.setMsg(「私は、サーバーシステムがビジー状態であるすみません、後でもう一度試してください」); jsonResult.setData(NULL )。 返却するJsonResultを。 } }
3.2装う内で統合hystrix
1.輸入依存度
< 依存性> < のgroupId > org.springframework.cloud </ のgroupId > < たartifactId >ばねクラウドスタータのNetflix-hystrix </ たartifactId > </ 依存>
(値=「ユーザクライアント」、フォールバック= UserFeignClientFallback.class)、フォールバック= UserFeignClientFallback.class後部アクセス失敗2.変更ふりクライアントインターフェイス@FeignClient
メソッド呼び出しUserFeignClientFallbackこのクラスのリターン情報の友情
3.書き込みUserFeignClientFallback、ふりインターフェース、インターフェースメソッドふりオーバーライド(達成するドラッグ底)を達成
@Component パブリック クラス UserFeignClientFallback 実装UserFeignClient { @Overrideの 公共ユーザーqueryById(ロングID){ 返す 新新(0、-1L、「私は申し訳ありませんが、サーバーが利用できない」ユーザーを); } }
4.yml設定ファイル機構を融合有効にするために、装うヒューズ機構は、デフォルトでは無効になっています
ureka:
クライアント:
serviceURLの:
defaultzone:HTTP:// peer0:1000 /ユーレカ/、HTTP://ピア1:1001 /ユーレカ/
インスタンス:
好む-IPアドレス:#は、レジストリの登録に真のIPに定義する
インスタンスID:オーダー-client:2001
サーバー:
ポート:2001
春:
アプリケーション:
名前:オーダークライアント-2001
装う:
hystrix:
有効:吹きオープンサポート真#へ