谷本 心 in せろ部屋

はてなダイアリーから引っ越してきました

Dapr + JavaでHello worldしました。

先日、MicrosoftがDaprというプロダクトをOSSで公開しました。

www.publickey1.jp

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-worldsrc/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について話すことになったので、しばらく、他のステートやアクター、分散トレーシングなども触ってみたいと思います。

それでは、
行こうよ、まぶしい光の世界!