簡単な紹介
サービスおよびサービス複合体との間の分散システムの依存関係では、やむを得ない状況がいくつかのサービスがそれらに依存リモートスケジューリングを遮断するスレッドを表示され、他のサービスにつながる、失敗するということです。ユーザの要求を引き起こしますサービス要求のための単一障害点は、最終的な結果は、サービス全体の枯渇資源のスレッドで、ブロックされています。サービスの失敗につながる依存する依存サービス、他のサービスがスレッドでもあるサービス全体のシステムで、その結果、利用できないまで、最終的にこれらのサービスのスレッド枯渇資源をリードし、状態をブロックされているので、使用できませんアバランシェ効果という。ヒューズモデルで得られた、アバランシェ効果を防止するために。
SpringCloudネットフリックスは、Hystrixと呼ばれる名前ブレーカーライブラリを実現ヒューズ機能を提供し、分散システムリンクが表示さで失敗を防ぐことができます。Hystrixは、サービスアクセスポイントリンク障害、および分散システム全体の弾性を増加させるソリューションを提供するために失敗を単離することによって防止されます。
閾値が一定時間内に設定されているよりも、サービスAPIインタフェースの失敗の数が少ない場合、ヒューズは、閉じた状態で通常のサービスAPIインタフェースです。要求を処理するインタフェース故障のAPIの数が閾値よりもセット大きい場合、それは決定される哺乳インタフェースAPIは、失敗し、ヒューズが開き、APIインタフェース実行を要求する論理フェイルファスト(論理フォールバック後退に、すなわち、裏面)ビジネス・ロジックを実行しない、要求スレッドはブロックされません。半開状態の時間の期間後に開いた状態のヒューズ、及び場合、失敗した通常のロジックを実行するように要求された場合に失敗し、残りの要求は、ヒューズが開くし続ける高速実行するロジックの特定の数を実行するための通常の要求成功した、ヒューズをオフにします。このようなヒューズは、それ自体を修復する能力を持っています。
図Bサービスは、何らかの理由で失敗したサービスBのタイムアウトに使用できない、すべての呼び出しになります。Bの呼び出しが(5秒以内にHystrix障害が上に定義されている20倍デフォルト値を発生する)特定のしきい値に到達するために失敗した場合、リンクが開いた状態になり、その後、サービスBへのすべての呼び出しはできません回路遮断器に置き換え実行は、リンクオープンメッセージフォールバックの表示を提供。Hystrixは、開発者がFallbakニュースを定義することを可能にする適切なメカニズムを提供します。
オープンリンクブロックされた滝のエラー、水没や修理サービスに間違った時間を聞かせすることができます。このフォールバックは別のHystrix保護、静的データ、または法的にnull値を呼び出すことができます。最初の呼び出しフォールバックその他の事業サービスの底が静的なデータを返すようにしてフォールバックは、鎖状構造を形成することができます。
リボンとRestTemplate上のヒューズ
pom.xmlの追加の依存関係
<!--ribbon中使用断路器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
起動クラスを変更します。
プラス@EnableHystrixノート、オープンhystrixヒューズ機能
- RibbonApplication.java
package org.springcloud.ribbon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
変更サービスサービス
HI()メソッドプラス@HystrixCommandのコメント。このコメントではHystrixのヒューズ機能上のHI()メソッドは、ここで、有効になっています:
@HystrixCommand方法はhystrixパッケージを示していること、サービス、降格への依存を単離することができ、高速高速リトライhystrix関連機能、等をフェイル
- fallbackMethodダウンスケーリング方法
- commandProperties共通の構成属性、対応する属性HystrixCommandが構成されていてもよい、例えば、スレッドプール又は信号分離の量、ルール、等ヒューズ
- ignoreExceptionsはデフォルトHystrixBadRequestExceptionフェイルに含まれていない、例外を無視します
- groupKey()グループ名、デフォルトのクラス名
- コマンドキーコマンド名は、デフォルト名を使用します
fallbackMethodは(フォールバック)論理法をロールバックされます。本実施例では、直接返される文字列。ヒューズの開状態では、論理行うフォールバック。最高のフォールバックロジックは、それが他のサービス呼び出し、そう簡単で迅速な故障、解放スレッドリソースを行わないリモートで複雑なロジックを必要としない、いくつかの静的な文字列を返すことです。リモートフォールバックロジックで他のサービスを起動する必要がある場合は、リモート呼び出しの他のサービスで最高のは、また、ヒューズを追加します。
- RibbonService.java
package org.springcloud.ribbon;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError")
public String hi(String name){
return restTemplate.getForObject("http://springcloud-eureka-provider/hi?name="+name,String.class);
}
public String hiError(String name){
return "hi,"+name+", use Ribbon + hystrix, eureka-provider is down!";
}
}
プロジェクトを開始するためには、
springcloud-ユーレカ・クラスタ・ピア1
springcloud-ユーレカ・クラスタ・ピア2
springcloud-ユーレカ・クラスタpeer3
springcloud-ユーレカ-provider1
springcloud-ユーレカ-Provider2ある
springcloud-ユーレカ-provider3
springcloud-リボン
のすべての正常開始後、ストップspringcloud-ユーレカ-provider1プロバイダ、ポート:8001サービスの
コマンドウィンドウへのアクセスカールhttp://eureka-ribbon.com:8100/hi?name=zhaojq、回路ブレーカが、力ですでにプロンプトです:サービスプロバイダがハングアップ
回路ブレーカでの使用に装います
application.ymlファイルを変更します
装うが、自己ブレーカーです、それはデフォルトでオンになっていません。あなたは、設定ファイルでそれを開く必要があります。
- application.yml
spring:
application:
name: springcloud-feign
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
server:
port: 8101
eureka:
instance:
hostname: eureka-feign.com
instance-id: eureka-feign
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
feign:
hystrix:
enabled: true
修正FeignConsumer
フェイル高速処理と@FeignClient注釈フォールバッククラス構成で。クラスふりヒューズロジックとして処理クラスは@FeignClientを修正するインタフェースを実装しなければなりません。
- FeignConsumer.java
package org.springcloud.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Component
/*指定这个接口所要调用的提供者服务名称 */
@FeignClient(value = "springcloud-eureka-provider",configuration = FeignConfig.class,fallback = FeignHystrix.class)
public interface FeignConsumer {
@GetMapping(value = "/hi")
String sayHiFromEurekaProvider(@RequestParam(value = "name")String name);
}
装うヒューズ新しいクラスロジック
- FeignHystrix.java
package org.springcloud.feign;
import org.springframework.stereotype.Component;
@Component
public class FeignHystrix implements FeignConsumer {
@Override
public String sayHiFromEurekaProvider(String name) {
eturn "hi,"+name+", use Feign + hystrix, eureka-provider is down!";
}
}
プロジェクトを開始するためには、
springcloud-ユーレカ・クラスタ・ピア1
springcloud-ユーレカ・クラスタ・ピア2
springcloud-ユーレカ・クラスタpeer3
springcloud-ユーレカ-provider1
springcloud-ユーレカ-Provider2ある
springcloud-ユーレカ-provider3
springcloud-装う
すべての正常開始後、ストップspringcloud-ユーレカ-provider1プロバイダ、ポート:8001サービスの
コマンドウィンドウへのアクセスカールhttp://eureka-feign.com:8101/hi、回路ブレーカが、力ですでにプロンプトです:サービスプロバイダがハングアップ
Hystrixダッシュボード
データ監視および使いやすいグラフィカルインタフェースを提供するコンポーネントの回路遮断器の状態としてHystrixダッシュボード。
リボンで使用Hystrixダッシュボード
pom.xmlの追加の依存関係
<!--ribbon中使用断路器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
application.ymlファイルを変更します
スタートアクチュエータの監視
- application.yml
spring:
application:
name: springcloud-ribbon
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
server:
port: 8100
# 自定义配置负载均衡策略
Load_Balance:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
eureka:
instance:
hostname: eureka-ribbon.com
instance-id: eureka-ribbon
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
#actuator端口
management:
endpoints:
web:
#修改访问路径 2.0之前默认是/, 2.0默认是 /actuator
base-path: "/actuator"
#开放所有页面节点 默认只开启了health、info两个节点
exposure:
include: '*'
server:
port: 9001
servlet:
context-path: /
ssl:
enabled: false
endpoint:
health:
show-details: always
hystrix:
stream:
enabled: true
起動クラスを変更します。
プラス@EnableHystrixDashboardコメント。
- RibbonApplication.java
package org.springcloud.ribbon;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
@EnableHystrixDashboard
public class RibbonApplication {
public static void main(String[] args) {
SpringApplication.run(RibbonApplication.class, args);
}
}
プロジェクトを開始するためには、
springcloud-ユーレカクラスタ・ピア1
springcloud-ユーレカクラスタ・ピア2
springcloud-ユーレカクラスタ-peer3
springcloud-ユーレカ-provider1
springcloud-ユーレカ-provider2
springcloud-ユーレカ-provider3
springcloudリボン
アクセスhttp://eureka-ribbon.com:8100/hiにアクセスするための最初のブラウザで、次にデータインジケータヒューズ、ブラウザ表示をhttp://eureka-ribbon.com:9001/actuator/hystrix.streamを訪問
アクセスhttp://eureka-ribbon.com:8100/hystrix
Moniterストリームをクリックしてください
このページショーインデックスデータの谷のヒューズ、Hystrix公式文書、文書アドレスからの図に示すように、そのデータの指標を意味します。https://github.com/Netflix/Hystrix/wiki
装うで使用されているHystrixダッシュボード
pom.xmlの追加の依存関係
それはPOMで依存関係の追加を開始する必要があるので装うは、Hystrixは依存依存起動しなくなります
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
application.ymlファイルを変更します
スタートアクチュエータの監視
- application.yml
spring:
application:
name: springcloud-feign
freemarker:
prefer-file-system-access: false
security:
user:
name: admin
password: 123456
server:
port: 8101
eureka:
instance:
hostname: eureka-feign.com
instance-id: eureka-feign
client:
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer1.com:8897/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer2.com:8898/eureka/,http://${spring.security.user.name}:${spring.security.user.password}@eureka-peer3.com:8899/eureka/
feign:
hystrix:
enabled: true
management:
endpoints:
web:
base-path: "/actuator"
exposure:
include: "*"
server:
port: 9002
servlet:
context-path: /
ssl:
enabled: false
endpoint:
health:
show-details: always
hystrix:
stream:
enabled: true
起動クラスを変更します。
@EnableHystrixと@EnableHystrixDashboardコメントプラス。
- FeignApplication.java
package org.springcloud.feign;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.openfeign.EnableFeignClients;
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@EnableHystrix
@EnableHystrixDashboard
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
プロジェクトを開始するためには、
springcloud-ユーレカ・クラスタ・ピア1
springcloud-ユーレカ・クラスタ・ピア2
springcloud-ユーレカ・クラスタpeer3
springcloud-ユーレカ-provider1
springcloud-ユーレカ-provider2
springcloud-ユーレカ-provider3
springcloud-装います
アクセスhttp://eureka-feign.com:8101/hiにアクセスするための最初のブラウザで、次にデータインジケータヒューズ、ブラウザ表示をhttp://eureka-feign.com:9002/actuator/hystrix.streamを訪問
アクセスhttp://eureka-feign.com:8101/hystrix
Moniterストリームをクリックしてください