Apache Meecrowaveを使用したマイクロサービスの構築
**
1. 概要
このチュートリアルでは、ApacheMeecrowaveフレームワークの基本的な機能について説明します。
Meecrowave is a lightweight microservices framework from Apache。これは、CDI、JAX-RS、およびJSONAPIで非常にうまく機能します。 セットアップと導入は非常に簡単です。 また、Tomcat、Glassfish、Wildflyなどの重いアプリケーションサーバーをデプロイする手間を排除します。
2. メーベン依存
Meecrowaveを使用するには、依存関係をpom.xml:で定義しましょう。
org.apache.meecrowave
meecrowave-core
1.2.1
Maven Centralで最新バージョンを確認してください。
3. シンプルサーバーの起動
Meecrowaveサーバーを起動するために必要なのは、main method、create a Meecrowave instance and invoke the main bake() methodを記述することだけです。
public static void main(String[] args) {
try (Meecrowave meecrowave = new Meecrowave()) {
meecrowave.bake().await();
}
}
アプリケーションを配布パッケージとしてパッケージ化する場合、このmainメソッドは必要ありません。これについては、後のセクションで説明します。 メインクラスは、IDEからアプリケーションをテストするときに役立ちます。
利点として、IDEでの開発中にメインクラスを使用してアプリケーションを実行すると、コードの変更が自動的にリロードされるため、テストのためにサーバーを何度も再起動する手間が省けます。
Java 9を使用している場合は、javax.xml.bindモジュールをVMに追加することを忘れないでください。
--add-module javax.xml.bind
この方法でサーバーを作成すると、デフォルトの構成でサーバーが起動します。 Meecrowave.Builderクラス:を使用して、プログラムでデフォルト構成を更新できます
Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.example.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);
そして、サーバーをベイクするときにこのbuilder インスタンスを使用します。
try (Meecrowave meecrowave = new Meecrowave(builder)) {
meecrowave.bake().await();
}
より多くの構成可能なプロパティhereがあります。
4. RESTエンドポイント
サーバーの準備ができたら、RESTエンドポイントをいくつか作成しましょう。
@RequestScoped
@Path("article")
public class ArticleEndpoints {
@GET
public Response getArticle() {
return Response.ok().entity(new Article("name", "author")).build();
}
@POST
public Response createArticle(Article article) {
return Response.status(Status.CREATED).entity(article).build();
}
}
主にJAX-RS annotations to create the REST endpointsを使用していることに注意してください。 JAX-RShttps://www.example.com/jax-rs-spec-and-implementationsの詳細については、[こちら]をご覧ください。
次のセクションでは、これらのエンドポイントをテストする方法を説明します。
5. 単体テスト
Meecrowaveで記述されたRESTAPIのユニットテストケースの記述は、注釈付きのJUnitテストケースの記述と同じくらい簡単です。
テストの依存関係をpom.xml firstに追加しましょう。
org.apache.meecrowave
meecrowave-junit
1.2.1
test
最新バージョンを確認するには、Maven Centralを確認してください。
また、テスト用のHTTPクライアントとしてOkHttpを追加しましょう。
com.squareup.okhttp3
okhttp
3.10.0
最新バージョンhereをチェックしてください。
依存関係を設定したら、テストを書きましょう。
@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsTest {
@ConfigurationInject
private Meecrowave.Builder config;
private static OkHttpClient client;
@BeforeClass
public static void setup() {
client = new OkHttpClient();
}
@Test
public void whenRetunedArticle_thenCorrect() {
String base = "http://localhost:" + config.getHttpPort();
Request request = new Request.Builder()
.url(base + "/article")
.build();
Response response = client.newCall(request).execute();
assertEquals(200, response.code());
}
}
テストケースの作成中に、テストクラスにMonoMeecrowave.Runnerクラスの注釈を付け、構成を挿入して、Meecrowaveがテストサーバーに使用するランダムポートにアクセスできるようにします。
6. 依存関係注入
inject dependencies into a classにするには、特定のスコープ内でそれらのクラスに注釈を付ける必要があります。
ArticleService classの例を見てみましょう。
@ApplicationScoped
public class ArticleService {
public Article createArticle(Article article) {
return article;
}
}
次に、javax.inject.Injectアノテーション:を使用して、これをArticleEndpointsインスタンスに挿入しましょう。
@Inject
ArticleService articleService;
7. アプリケーションのパッケージ化
Meecrowave Mavenプラグインを使用すると、配布パッケージの作成が非常に簡単になります。
...
org.apache.meecrowave
meecrowave-maven-plugin
1.2.1
プラグインを配置したら、use the Maven goal meecrowave:bundle to package the applicationを実行します。
パッケージ化すると、ターゲットディレクトリ内にzipが作成されます。
meecrowave-meecrowave-distribution.zip
このzipには、アプリケーションをデプロイするために必要なアーティファクトが含まれています。
|____meecrowave-distribution
| |____bin
| | |____meecrowave.sh
| |____logs
| | |____you_can_safely_delete.txt
| |____lib
| |____conf
| | |____log4j2.xml
| | |____meecrowave.properties
binディレクトリに移動して、アプリケーションを起動しましょう。
./meecrowave.sh start
アプリケーションを停止するには:
./meecrowave.sh stop
8. 結論
この記事では、Apache Meecrowaveを使用してマイクロサービスを作成する方法を学びました。 また、アプリケーションに関するいくつかの基本的な構成を検討し、配布パッケージを準備しました。
いつものように、コードスニペットはGithub Projectにあります。
**