「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring Boot と Spring Cloud を使用したマイクロサービスの開発

Spring Boot と Spring Cloud を使用したマイクロサービスの開発

2024 年 11 月 6 日に公開
ブラウズ:413

Developing Microservices with Spring Boot and Spring Cloud

マイクロサービス アーキテクチャは、スケーラブルなモジュール型システムを構築するための一般的なソリューションになっています。マイクロサービスを使用すると、モノリシック アプリケーションをより小さな独立した特殊なサービスに分割できるため、システムの保守と進化が容易になります。この投稿では、Spring Boot と Spring Cloud を使用して堅牢かつ効率的なマイクロサービスを作成する方法を検討します。

マイクロサービスの概要
マイクロサービスの背後にある主なアイデアは、アプリケーションを独立して開発、デプロイ、拡張できる小さなサービスに分割することです。各マイクロサービスは特定の機能を担当し、通常は REST API またはメッセージングを使用して軽量な方法で他のサービスと通信する必要があります。

マイクロサービスには次のような利点があります:

  • 独立したスケーラビリティ: 各サービスは個別にスケーリングできます。
  • 継続的デプロイ: 他のマイクロサービスに影響を与えることなく、マイクロサービスを更新または修正できます。
  • 技術的な柔軟性: 各サービスは、異なるテクノロジとフレームワークを使用して実装できます。 次に、Spring Boot と Spring Cloud を使用してマイクロサービスを作成および管理する方法を見てみましょう。

それでは、Spring BootSpring Cloud を使用してマイクロサービスを作成および管理する方法を見てみましょう。

Spring Boot を使用したマイクロサービスの作成

Spring Boot は、最小限の構成と素早い起動に重点を置いているため、マイクロサービスの構築が簡単になります。まずは 2 つのマイクロサービス、「ユーザー」サービス (User-service) と「注文」サービス (Order-service) を作成しましょう。

  1. Spring Boot プロジェクトのセットアップ

マイクロサービスをセットアップするには、Spring Initializr を使用して、Spring Web や Spring Data JPA など、必要な依存関係を含む新しいプロジェクトを生成できます。ユーザー サービスの REST コントローラーの基本的な例を次に示します:

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity getUserById(@PathVariable Long id) {
        User user = new User(id, "Matheus");
        return ResponseEntity.ok(user);
    }
}

各マイクロサービスは独自のデータベースを持つことができ、サービスが独立して分離されることが保証されます。ユーザーサービスには、たとえば H2 または PostgreSQL を使用した構成を使用できます。

  1. REST API の公開 各マイクロサービスは REST API 経由でリソースを公開し、他のサービスやクライアントがその機能を利用できるようにします。以下は、ユーザー サービスの API を使用する Order-service のエンドポイントの例です。
@RestController
@RequestMapping("/orders")
public class OrderController {

    private final RestTemplate restTemplate;

    public OrderController(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }

    @GetMapping("/{id}")
    public ResponseEntity getOrderById(@PathVariable Long id) {
        User user = restTemplate.getForObject("http://user-service/users/"   id, User.class);
        Order order = new Order(id, user, "Order details");
        return ResponseEntity.ok(order);
    }
}

RestTemplate は、マイクロサービス間で HTTP リクエストを行うために使用されます。

Spring Cloud を使用したマイクロサービスの管理
Spring Boot はマイクロサービスを迅速に作成するのに役立ちますが、Spring Cloud は分散環境でこれらのサービスの通信と復元力を管理するための追加ツールを提供します。いくつかの重要なコンポーネントについて説明しましょう。

  1. エウレカディスカバリーサーバー マイクロサービスの課題の 1 つはサービスの検出です。 Eureka は、固定 URL を必要とせずにサービス自体を登録し、他のサービスを検出できるようにする検出サーバーです。
  • spring-cloud-starter-netflix-eureka-server の依存関係を Eureka サーバーに追加します。
  • User-service と Order-service の両方で application.yml ファイルを構成して、Eureka サーバーに登録します。
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

これで、サービスは Eureka に自動的に登録され、お互いを見つけやすくなります。

  1. Spring Cloud Gateway を使用した API ゲートウェイ マイクロサービス アーキテクチャでは、すべてのサービスに対して単一のエントリ ポイントを持つことが不可欠です。 API ゲートウェイはクライアントとマイクロサービスの間の仲介者として機能し、リクエストを効率的にルーティングします。

spring-cloud-starter-gateway 依存関係を追加して、単純なゲートウェイを作成します:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://USER-SERVICE
          predicates:
            - Path=/users/**
        - id: order-service
          uri: lb://ORDER-SERVICE
          predicates:
            - Path=/orders/**

これにより、/users/** に対するリクエストはすべてユーザー サービスにルーティングされ、/orders/** にも同じことが当てはまります。

3.** サーキットブレーカーによる回復力 (Hystrix)**

マイクロサービス環境では、障害は避けられません。 Hystrix は、障害を分離することでサービスを過負荷から保護するサーキット ブレーカーです。これを別のサービスを使用するメソッドに適用する方法の例を示します:

@HystrixCommand(fallbackMethod = "fallbackGetUser")
public User getUser(Long id) {
    return restTemplate.getForObject("http://user-service/users/"   id, User.class);
}

public User fallbackGetUser(Long id) {
    return new User(id, "Default User");
}

ユーザー サービスが失敗した場合、fallbackGetUser メソッドが呼び出され、システムが機能し続けることが保証されます。

Spring Boot を Spring Cloud と組み合わせると、スケーラブルで復元力のあるマイクロサービスを開発するための優れたインフラストラクチャが提供されます。サービス検出、ルーティング、障害管理などの機能を使用すると、アプリケーションは分散された動的な環境で動作する準備が整います。

モノリシック アプリケーションからマイクロサービスに移行する場合でも、最初から始める場合でも、Spring Boot と Spring Cloud はプロセスを高速化し、堅牢なアーキテクチャを確保できます。

この投稿は気に入りましたか?ご質問やご提案がございましたら、コメント欄に残してください。そして、これらのヒントから恩恵を受ける可能性がある他の開発者とそれを共有することを忘れないでください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/matheusmartinello/developing-microservices-with-spring-boot-and-spring-cloud-5feh?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3