Helidonをなんとなくやってみるスレ
OpenTelemetryはJava SDKの実装が一番進んでるのと、Go SDKの実装が停滞していて、Javaでサンプルを作らないといよいよやっていけない気持ちが湧いてきたので、どうせならJavaでマイクロサービスを作るときにこれから使われていきそうなMicroProfileを触っておこうかと思ったのでやってみる。
以前 @ryushi にMicroProfileの実装ならHelidonがいいと聞いたので、とりあえずHelidonを初めて見ることにする。
ぱっと検索してざっくり概要がまとまっているので @shibukawa の記事を読む。
記事に書いてあるとおり helidon
コマンドをインストールして超雑に始めてみる。
$ brew install helidon
$ helidon --version
build.date 2023-11-08 22:15:54 GMT
build.version 3.0.6
build.revision ${buildNumber}
project.helidon.version 4.0.3
project.flavor MP
latest.helidon.version 4.0.3
default.helidon.version 4.0.3
無事インストールできたので記事にあったGetting Startedをしてみる
$ helidon init
$ helidon dev
他のターミナルから localhost:8080
にHTTP GETを送信
$ curl http://localhost:8080/greet
{"message":"Hello World!"}
コードを見ると、 GreetResource.java
や SimpleGreetResource.java
の各クラスに @Path
アノテーションとかついてて、さらにその中のメソッドにも @Path
アノテーションがついているのをみて、サブディレクトリのエントリーポイントになっているのがわかる。また @Path("/{name}")
、 @PathParam("name")
などとしているので、パラメーターの扱いもとりあえずわかった。
ところで、 src/main/java/io/helidon/examples/quickstart/mp
には Main.java
がないが、普通にウェブサーバーが起動している上に、 xxxResource.java
にリクエストがディスパッチされている。これらのJAX-RS Resourceが呼ばれる工程が分からないのが気持ち悪いので、公式ドキュメントをちゃんと読むことにした。
MP Quickstart を読んだら、いきなり helidon init
を使わずに mvn
を起動してるので「違うじゃん」って思ったけど、生成されたコードをとかを見たら一緒だった。 helidon init
は次のコマンドのショートカットだったんだな。
mvn -U archetype:generate -DinteractiveMode=false \
-DarchetypeGroupId=io.helidon.archetypes \
-DarchetypeArtifactId=helidon-quickstart-mp \
-DarchetypeVersion=4.0.3 \
-DgroupId=io.helidon.examples \
-DartifactId=helidon-quickstart-mp \
-Dpackage=io.helidon.examples.quickstart.mp
で、続きの helidon dev
もなく、同様にこれも次のコマンドのショートカットだったんだな。
mvn package
java -jar target/helidon-quickstart-mp.jar
先にやってみたような /greet
へのリクエストやヘルスチェックはうまくいったので大丈夫。DockerやKubernetesへのデプロイは一旦パス。