1. 概要

このチュートリアルでは、MSF4Jフレームワークを使用したマイクロサービス開発を紹介します。

これは、高性能に焦点を合わせたさまざまなサービスを簡単に構築する方法を提供する軽量ツールです。

2. Mavenの依存関係

MSF4Jベースのマイクロサービスを構築するには、通常よりも少し多くのMaven構成が必要になります。 このフレームワークのシンプルさとパワーには代償が伴います。基本的に、親アーティファクトとメインクラスを定義する必要があります。

<parent>
    <groupId>org.wso2.msf4j</groupId>
    <artifactId>msf4j-service</artifactId>
    <version>2.6.0</version>
</parent>

<properties>
    <microservice.mainClass>
        com.baeldung.msf4j.Application
    </microservice.mainClass>
</properties>

msf4j-service の最新バージョンは、MavenCentralにあります。

次に、3つの異なるマイクロサービスシナリオを示します。 最初に最小限の例、次にRESTful API、最後にSpring統合サンプル。

3. 基本プロジェクト

3.1. シンプルなAPI

簡単なWebリソースを公開します。

このサービスは、各メソッドがリクエストを処理するいくつかのアノテーションを使用するクラスで提供されます。 これらのアノテーションを通じて、各リクエストに必要なメソッド、パス、およびパラメーターを設定します。

返されるコンテンツタイプはプレーンテキストです。

@Path("/")
public class SimpleService {

    @GET
    public String index() {
        return "Default content";
    }

    @GET
    @Path("/say/{name}")
    public String say(@PathParam("name") String name) {
        return "Hello " + name;
    }
}

また、使用されるすべてのクラスとアノテーションは、この記事ですでにをカバーしている標準のJAX-RS要素であることを忘れないでください。

3.2. 応用

このメインクラスを使用してマイクロサービスを起動できます。ここで、前に定義したサービスを設定、デプロイ、実行します。

public class Application {
    public static void main(String[] args) {
        new MicroservicesRunner()
          .deploy(new SimpleService())
          .start();
    }
}

必要に応じて、ここで deploy 呼び出しをチェーンして、複数のサービスを一度に実行できます。

new MicroservicesRunner()
  .deploy(new SimpleService())
  .deploy(new ComplexService())
  .start()

3.3. マイクロサービスの実行

MSF4Jマイクロサービスを実行するには、いくつかのオプションがあります。

  1. IDEで、Javaアプリケーションとして実行
  2. 生成されたjarパッケージの実行

開始すると、 http:// localhost:9090で結果を確認できます。

3.4. スタートアップコンフィギュレーション

スタートアップコードにいくつかの句を追加するだけで、さまざまな方法で構成を微調整できます。

たとえば、リクエストに任意の種類のインターセプターを追加できます。

new MicroservicesRunner()
  .addInterceptor(new MetricsInterceptor())
  .deploy(new SimpleService())
  .start();

または、認証用のようなグローバルインターセプターを追加できます。

new MicroservicesRunner()
  .addGlobalRequestInterceptor(newUsernamePasswordSecurityInterceptor())
  .deploy(new SimpleService())
  .start();

または、セッション管理が必要な場合は、セッションマネージャーを設定できます。

new MicroservicesRunner()
  .deploy(new SimpleService())
  .setSessionManager(new PersistentSessionManager()) 
  .start();

この各シナリオの詳細といくつかの動作サンプルを確認するには、MSF4Jの公式GitHubリポジトリを確認してください。

4. APIマイクロサービスの構築

可能な限り最も単純な例を示しました。 次に、より現実的なプロジェクトに移ります。

今回は、食事のリポジトリを管理するためのすべての一般的なCRUD操作を使用してAPIを構築する方法を示します。

4.1. モデル

モデルは、食事を表す単純なPOJOです。

public class Meal {
    private String name;
    private Float price;

    // getters and setters
}

4.2. API

APIをWebコントローラーとして構築します。 標準の注釈を使用して、各関数を次のように設定します。

  • URLパス
  • HTTPメソッド:GET、POSTなど。
  • input( @Consumes )コンテンツタイプ
  • 出力( @Produces )コンテンツタイプ

それでは、標準のCRUD操作ごとにメソッドを作成しましょう。

@Path("/menu")
public class MenuService {

    private List<Meal> meals = new ArrayList<Meal>();

    @GET
    @Path("/")
    @Produces({ "application/json" })
    public Response index() {
        return Response.ok()
          .entity(meals)
          .build();
    }

    @GET
    @Path("/{id}")
    @Produces({ "application/json" })
    public Response meal(@PathParam("id") int id) {
        return Response.ok()
          .entity(meals.get(id))
          .build();
    }

    @POST
    @Path("/")
    @Consumes("application/json")
    @Produces({ "application/json" })
    public Response create(Meal meal) {
        meals.add(meal);
        return Response.ok()
          .entity(meal)
          .build();
    }

    // ... other CRUD operations
}

4.3. データ変換機能

MSF4Jは、GSON(デフォルトで付属)やJackson( msf4j-feature 依存関係を介して)などのさまざまなデータ変換ライブラリのサポートを提供します。 たとえば、GSONを明示的に使用できます。

@GET
@Path("/{id}")
@Produces({ "application/json" })
public String meal(@PathParam("id") int id) {
    Gson gson = new Gson();
    return gson.toJson(meals.get(id));
}

ちなみに、@Consumesアノテーションと@Producesアノテーションの両方で中括弧を使用しているため、複数のmimeタイプを設定できます。

4.4. APIマイクロサービスの実行

前の例と同じように、MenuServiceを公開するApplicationクラスを介してマイクロサービスを実行します。

開始すると、http:// localhost:9090/menuで結果を確認できます。

5. MSF4JとSpring

MSF4JベースのマイクロサービスにSpringを適用することもできます。このサービスから、依存性注入機能を利用できます。

5.1. Mavenの依存関係

SpringとMustacheのサポートを追加するには、以前のMaven構成に適切な依存関係を追加する必要があります。

<dependencies>
    <dependency>
        <groupId>org.wso2.msf4j</groupId>
        <artifactId>msf4j-spring</artifactId>
        <version>2.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.wso2.msf4j</groupId>
        <artifactId>msf4j-mustache-template</artifactId>
        <version>2.6.1</version>
    </dependency>
</dependencies>

msf4j-springおよびmsf4j-mustache-templateの最新バージョンは、MavenCentralにあります。

5.2. 食事API

このAPIは、模擬食事リポジトリを使用した単純なサービスです。 自動配線にSpringアノテーションを使用する方法と、このクラスをSpringサービスコンポーネントとして設定する方法に注意してください。

@Service
public class MealService {
 
    @Autowired
    private MealRepository mealRepository;

    public Meal find(int id) {
        return mealRepository.find(id);
    }

    public List<Meal> findAll() {
        return mealRepository.findAll();
    }

    public void create(Meal meal) {
        mealRepository.create(meal);
    }
}

5.3. コントローラ

コントローラをコンポーネントとして宣言し、Springは自動配線を通じてサービスを提供します。 最初の方法はMustacheテンプレートを提供する方法を示し、2番目の方法はJSONリソースを提供する方法を示しています。

@Component
@Path("/meal")
public class MealResource {

    @Autowired
    private MealService mealService;

    @GET
    @Path("/")
    public Response all() {
        Map map = Collections.singletonMap("meals", mealService.findAll());
        String html = MustacheTemplateEngine.instance()
          .render("meals.mustache", map);
        return Response.ok()
          .type(MediaType.TEXT_HTML)
          .entity(html)
          .build();
    }

    @GET
    @Path("/{id}")
    @Produces({ "application/json" })
    public Response meal(@PathParam("id") int id) {
        return Response.ok()
          .entity(mealService.find(id))
          .build();
    }

}

5.4. メインプログラム

Springシナリオでは、次のようにしてマイクロサービスを開始します。

public class Application {

    public static void main(String[] args) {
        MSF4JSpringApplication.run(Application.class, args);
    }
}

開始すると、http:// localhost:8080 /mealsで結果を確認できます。デフォルトのポートはSpringプロジェクトによって異なりますが、任意のポートに設定できます。

5.5. 構成Bean

インターセプターやセッション管理などの特定の設定を有効にするために、構成Beanを追加できます。

たとえば、これはマイクロサービスのデフォルトポートを変更します。

@Configuration
public class PortConfiguration {

    @Bean
    public HTTPTransportConfig http() {
        return new HTTPTransportConfig(9090);
    }

}

6. 結論

この記事では、MSF4Jフレームワークを紹介し、さまざまなシナリオを適用してJavaベースのマイクロサービスを構築しました。

この概念には多くの話題がありますが、いくつかの理論的背景がすでに設定されています。MSF4Jは、このパターンを適用するための便利で標準化された方法を提供します。

また、詳細については、 Eclipse Microprofile を使用したマイクロサービスの構築、およびもちろんSpringBootおよびSpringCloudを使用したSpringマイクロサービスに関するガイドをご覧ください。

そして最後に、ここにあるすべての例は、GitHubリポジトリにあります。