Dapr + JavaでHello worldしました。
先日、MicrosoftがDaprというプロダクトをOSSで公開しました。
Distributed Application Runtimeの略だそうで、なんかIstio的な感じなのかなーと思ったのですが「ステート管理」みたいな機能もある所が少し気になって、ドキュメントとかを眺めていると、ステート管理、メッセージング、アクターなど、ただのサイドカーよりも機能が多めになっていて、かつ、分散トレーシングの機能も持っている辺りを見て、あぁなるほどとなりました。ステート管理やメッセージングをプラットフォーム側が持つようになれば、AOPやBCIなしで分散トレーシングができるようになるし、これはアリだなという謎の納得感を得ました。
まぁ細かいことはさておき、Daprのアプローチがちょっと面白いなと思い、Daprそのものというよりも、このようなアプローチがゲームチェンジャーになるのかなと思うところがあったので、少し動かして確認してみようという気持ちになりました。
なんというか、こういう少し未来を先取りしたようなプロダクトが出てくると、良いなってなりますよね。「明日が好きな人だけが、地球を回す」という言葉がありましたが、地球を回しにいきたいと思います。ちょっと意味不明ですね。
そんなわけで、まずはHello worldまでやりました。
Daprのインストール
まず、DaprのCLIをインストールします。先にDockerをインストールしておく必要がありますが、このブログの読者で自分のPCにDockerが入ってない人とかいないですよね? さすがに?
Dockerさえ入っていれば、Macではこれを実行するだけです。
curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash
他のOSのインストール方法などは、ドキュメントを参照してください。 https://github.com/dapr/docs/blob/master/getting-started/environment-setup.md
このインストールが終わった時点で dapr --version
とかをしても、まだエラーになります。先に初期化をする必要があります。
dapr init
これでDapr側は準備完了です。おもむろに dapr --version
とかしても大丈夫です。
Micronautのインストール
Dapr上で動くサービスは、HTTPかgRPCで通信を受け取る必要があります。残念ながらJavaでは標準APIだけでHTTPサービスを作るのが面倒くさい(Socketサーバか、com.sunパッケージのHttpServerしかない)ので、Spring BootやMicronautなどを使うことになります。
今回はMicronautを使うことにしました。既に皆さんMicronautもインストール済みだとは思いますが、もし mn --version
して command not found
になった人は、心から反省して、Micronautのドキュメントを見てCLIをインストールしてください。
https://docs.micronaut.io/latest/guide/index.html#buildCLI
僕も反省しながら次のコマンドを打ちました。
brew update brew install micronaut
これでMicronautも準備できました。
MicronautでHello worldアプリを作る
micronautでHello worldするWebアプリを作ります。
mn create-app hello-world
これで出来上がった hello-world
の src/main/java/hello/world
フォルダにコントローラークラスを作ります。ソースはほぼ公式ドキュメントからのコピペです。
package hello.world; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; @Controller("/hello") public class HelloController { @Get(produces = MediaType.TEXT_PLAIN) public String index() { return "Hello, Sofmap World"; } }
あとは hello-world
フォルダで ./gradlew run
すれば、Webサーバが立ち上がります。
curl localhost:8080/hello
を実行して Hello, Sofmap World
とメッセージが出れば完成です。
Dapr上でMicronautを実行
それでは、いま作ったMicronautアプリを、Dapr上で走らせます。コマンドは次のようになります。
dapr run --app-id hello-sofmap --app-port 8080 --port 8000 ./gradlew run
--app-port
オプションは中で動作するMicronautが使うポート、--port
オプションはDaprの外から呼び出す時のポートになります。そのオプションの後ろに実行コマンドを付ければ、そのコマンドがDapr上で実行されるわけです。とても簡単ですね。
上のコマンドを実行してDaprが起動したら、curlコマンドでDaprのエンドポイントを叩いて処理を実行します。
curl localhost:8000/v1.0/invoke/hello-sofmap/method/hello
これで無事 Hello, Sofmap World
が表示されました!
まとめ
総じて、何らハマることなく、DaprのHello worldができました。
先ほど、11月の関ジャバでDaprについて話すことになったので、しばらく、他のステートやアクター、分散トレーシングなども触ってみたいと思います。
それでは、
行こうよ、まぶしい光の世界!