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 の最新バージョンは、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マイクロサービスを実行するには、いくつかのオプションがあります。
- IDEで、Javaアプリケーションとして実行
- 生成された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リポジトリのにあります。