MSF4JによるJavaマイクロサービスの紹介

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 の最新バージョンはMaven Centralにあります。

次に、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;
    }
}

そして、使用されているすべてのクラスとアノテーションは、http://www.oracle.com/technetwork/java/javaee/tech/jax-rs-159890.html[標準のJAX-RS]要素であることを覚えておいてください。[この記事の中]jax-rs-spec-and-implementation。

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のhttps://github.com/wso2/msf4j/tree/master/samples[公式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 )コンテンツタイプ

  • output( @ 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(https://search.maven.org/classic/#search%7Cga%7C1%7Cmsf4j-feature[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

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

5.1. Mavenの依存関係

SpringとMoustacheのサポートを追加するには、以前の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 およびhttps://search.maven.org/classic/#search%7Cga%7C1の最新バージョン%7Cmsf4j-moustache-template[msf4j-moustache-template]はMaven Centralにあります。

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は自動配線を通じてサービスを提供します。最初の方法は、Moustacheテンプレートの提供方法と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ベースのマイクロサービスを構築しました。

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

また、さらに読みたい場合は、リンク:/eclipse-microprofile[Eclipse Microprofileを使用したMicroservicesの構築]、そしてもちろんリンクに関するガイド:/spring-microservices-guide[Spring BootおよびSpring Cloudを使用したSpring Microservices]を参照してください。

そして最後に、ここに挙げた例はすべてhttps://github.com/eugenp/tutorials/tree/master/msf4j[GitHubリポジトリ]にあります。