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

MSF4Jを使用したJavaマイクロサービスの概要

1. 概要

このチュートリアルでは、microservices development using the MSF4Jframeworkを紹介します。

これは、高性能に焦点を当てたさまざまなサービスを簡単に構築できる軽量なツールです。

2. Mavenの依存関係

MSF4Jベースのマイクロサービスを構築するには、通常よりも少し多くのMaven構成が必要です。 このフレームワークのシンプルさとパワーには、basically, we need to define a parent artifactとメインクラスの代償が伴います。


    org.wso2.msf4j
    msf4j-service
    2.6.0



    
        com.example.msf4j.Application
    

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;
    }
}

また、使用されるすべてのクラスとアノテーションはstandard JAX-RS要素であり、すでにin this articleについて説明したことを忘れないでください。

3.2. 応用

以前に定義したサービスを設定、デプロイ、実行するWe can launch the microservice with this main class

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. スタートアップの構成

We can tweak the configurationは、スタートアップコードにいくつかの句を追加するだけで、さまざまな方法で使用できます。

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

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のofficial GitHub repoを確認してください。

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など。

  • 入力(@Consumes)コンテンツタイプ

  • 出力(@Produces)コンテンツタイプ

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

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

    private List meals = new ArrayList();

    @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. データ変換機能

GSON(デフォルトで付属)やJackson(msf4j-feature依存関係を介して)などのMSF4J offers support for different data conversion libraries。 たとえば、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と春

We can also apply Spring in our MSF4J based microservicesから、依存性注入機能を取得します。

5.1. Mavenの依存関係

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


    
        org.wso2.msf4j
        msf4j-spring
        2.6.1
    
    
        org.wso2.msf4j
        msf4j-mustache-template
        2.6.1
    

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

5.2. 食事API

このAPIは、模擬食事リポジトリを使用する単純なサービスです。 Notice how we use Spring annotations for auto-wiringおよびこのクラスをSpringサービスコンポーネントとして設定します。

@Service
public class MealService {

    @Autowired
    private MealRepository mealRepository;

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

    public List 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);
    }
}

Once started, we can see the result at http://localhost:8080/meals.デフォルトのポートはSpringプロジェクトによって異なりますが、任意のポートに設定できます。

5.5. 構成Bean

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

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

@Configuration
public class PortConfiguration {

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

}

6. Conclusion

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

この概念には多くの話題がありますが、some theoretical background has been already setとMSF4Jは、このパターンを適用するための便利で標準化された方法を提供します。

また、さらに詳しくは、building Microservices with Eclipse Microprofileと、もちろんSpring Microservices with Spring Boot and Spring Cloudに関するガイドをご覧ください。

そして最後に、ここにあるすべての例はin the GitHub repoで見つけることができます。