Spring Boot で Spring Cloud Alibaba を使用してマイクロサービス ガバナンスを実装する方法
最新のマイクロサービス アーキテクチャでは、サービスの数と複雑さがますます増大しており、これらのサービスを効果的に管理する方法がますます重要になっています。Spring Cloud Alibaba は、サービスの登録と検出、構成センター、トラフィック管理、ヒューズのダウングレード、分散トランザクション、その他の機能を含む、マイクロサービス ガバナンス ソリューションの完全なセットを提供します。この記事では、Spring Boot で Spring Cloud Alibaba を使用してマイクロサービス ガバナンスを実装する方法を紹介します。
1. サービスの登録と検出
マイクロサービス アーキテクチャでは、サービスの数と変更の頻度が高く、サービスを動的に検出して管理する方法が非常に重要になります。Spring Cloud Alibaba は、サービスの登録、検出、負荷分散を簡単に管理できる Nacos と呼ばれるサービス登録および検出コンポーネントを提供します。以下は、Nacos を使用して Spring Boot でサービスの登録と検出を実装する方法のサンプル コードです。
1.1 依存関係の導入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
1.2 設定パラメータ
application.yml に次の設定を追加します。
spring:
application:
name: service-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
1.3 登録サービス
@EnableDiscoveryClient アノテーションを Spring Boot アプリケーションのスタートアップ クラスに追加して、アプリケーションがサービス プロバイダーであることを示し、それ自体を Nacos センターに登録します。
@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProviderApplication.class, args);
}
}
1.4 ディスカバリーサービス
@Autowired を使用して DiscoveryClient オブジェクトを挿入します。これにより、現在 Nacos センターに登録されているすべてのサービスを取得できます。
@RestController
public class HelloController {
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/hello")
public String hello() {
List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
if (instances != null && instances.size() > 0) {
ServiceInstance instance = instances.get(0);
String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/hello";
RestTemplate restTemplate = new RestTemplate();
return restTemplate.getForObject(url, String.class);
}
return "Hello World";
}
}
2. 構成センター
マイクロサービス アーキテクチャでは、多くの場合、さまざまな環境に応じてサービスの構成を変える必要があり、これらの構成を効果的に管理する方法がますます重要になっています。Spring Cloud Alibaba は、サービス構成を簡単に管理できる Nacos と呼ばれる構成センター コンポーネントを提供します。以下は、Nacos を使用して Spring Boot に構成センターを実装する方法のサンプル コードです。
2.1 依存関係の導入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
2.2 設定パラメータ
bootstrap.yml に次の設定を追加します。
spring:
application:
name: service-provider
cloud:
nacos:
config:
server-addr: localhost:8848
group: DEV
file-extension: properties
2.3 設定ファイルの作成
Nacos センターに service-provider.properties という名前の構成ファイルを作成し、次の内容を追加します。
greeting=Hello
2.4 設定の読み取り
@Value アノテーションを使用して Spring Boot アプリケーションに構成項目を挿入します。
@RestController
public class HelloController {
@Value("${greeting}")
private String greeting;
@GetMapping("/hello")
public String hello() {
return greeting + " World";
}
}
3. 交通管理
マイクロサービス アーキテクチャでは、トラフィック管理が非常に重要であり、システムの安定性と可用性は、電流制限とヒューズによって保護できます。Spring Cloud Alibaba は、電流制限やサーキット ブレーカーなどの機能を簡単に実装できる Sentinel と呼ばれるトラフィック管理コンポーネントを提供します。以下は、Sentinel を使用して Spring Boot で電流制限を実装する方法のコード例です。
3.1 依存関係の導入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
3.2 設定パラメータ
application.yml に次の設定を追加します。
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
3.3 電流制限ルールの構成
@SentinelResource アノテーションをスタートアップ クラスに追加して、制限する必要があるメソッドをマークします。
@SpringBootApplication
public class ServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProviderApplication.class, args);
}
@GetMapping("/hello")
@SentinelResource(value = "hello", blockHandler = "handleBlock")
public String hello() {
return "Hello World";
}
public String handleBlock(BlockException ex) {
return "Blocked";
}
}
3.4 電流制限効果の表示
Sentinel コンソールを起動し、ブラウザに http://localhost:8080 と入力して Sentinel コンソールを開き、電流制限の効果を確認します。
4. ヒューズの劣化
マイクロサービス アーキテクチャでは、サービス間の呼び出しが非常に頻繁に行われるため、サービス間の障害を効果的に処理する方法がますます重要になっています。Spring Cloud Alibaba では、ヒューズ ダウングレード機能を簡単に実装できる Sentinel と呼ばれるヒューズ ダウングレード コンポーネントを提供しています。以下は、Spring Boot で Sentinel を使用してヒューズのダウングレードを実装する方法のサンプル コードです。
4.1 依存関係の導入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
4.2 設定パラメータ
application.yml に次の設定を追加します。
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
4.3 サーキット ブレーク ルールの構成
@SentinelResource アノテーションをスタートアップ クラスに追加し、フォールバック メソッドを指定します。
@SpringBootApplication
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
@GetMapping("/hello")
@SentinelResource(value = "hello", fallback = "handleFallback")
public String hello() {
throw new RuntimeException("Error");
}
public String handleFallback(Throwable t) {
return "Fallback";
}
}
4.4 定着効果を確認する
Sentinel コンソールを起動し、ブラウザに http://localhost:8080 と入力して Sentinel コンソールを開き、融合エフェクトを表示します。
エピローグ
この記事では、Spring Boot で Spring Cloud Alibaba を使用して、サービスの登録と検出、構成センター、トラフィック管理、ヒューズの劣化などの機能を含むマイクロサービス ガバナンスを実装する方法を紹介します。Spring Cloud Alibaba は、マイクロサービス アーキテクチャを効果的に管理および保護し、システムの安定性と可用性を向上させるのに役立つ、マイクロサービス ガバナンス ソリューションの完全なセットを提供します。