メルカリのマイクロサービスのサンプルを触ってみる

Mercari Microservices Example

https://github.com/mercari/mercari-microservices-example

とりあえず動かして中身を見てみる。

起動

何はともあれとりあえず。

以下コマンドで色々構築してくれるらしい。

make cluster

完了したら確認

./script/kubectl get pods --all-namespaces | grep -E '^(gateway|authority|catalog|customer|item)' authority app-8595bfcfc7-9lcdx 2/2 Running 0 8m59s authority app-8595bfcfc7-kk828 2/2 Running 0 8m59s catalog app-7b59d8bf9f-czl82 2/2 Running 0 6m33s catalog app-7b59d8bf9f-g6dts 2/2 Running 0 6m33s customer app-687b79dfb8-chqq2 2/2 Running 0 4m4s customer app-687b79dfb8-fdfsd 2/2 Running 0 4m4s gateway app-57dcb5459b-c4fqb 2/2 Running 0 11m gateway app-57dcb5459b-gwdq5 2/2 Running 0 11m item app-785f56f55f-gt62x 2/2 Running 0 99s item app-785f56f55f-m79md 2/2 Running 0 99s

使ってみる

とりあえず動作確認

Readme準拠で倣っていく

Sign up

* jq入ってなかったのでbrewで入れる必要があった

$ curl -s -XPOST -d '{"name":"gopher"}' localhost:30000/auth/signup | jq . { "customer": { "id": "5010f592-3ba2-4612-a177-68551b39d509", "name": "gopher" } }
Sign in
$ TOKEN=$(curl -s -XPOST -d '{"name":"gopher"}' localhost:30000/auth/signin | jq .access_token -r)
Create item
$ curl -s -XPOST -d '{"title":"Keyboard","price":30000}' -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "item": { "id": "bef06630-5724-4b59-b97c-3dba9289da1f", "customer_id": "5010f592-3ba2-4612-a177-68551b39d509", "title": "Keyboard", "price": "30000" } }
List item
$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "items": [ { "id": "bef06630-5724-4b59-b97c-3dba9289da1f", "title": "Keyboard", "price": "30000" }, { "id": "e0e58243-4138-48e5-8aba-448a8888e2ff", "title": "Mobile Phone", "price": "10000" }, { "id": "0b185d96-d6fa-4eaf-97f6-3f6d2c1649b6", "title": "Laptop", "price": "20000" } ] }
Get a item detail
$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items/e0e58243-4138-48e5-8aba-448a8888e2ff | jq . { "item": { "id": "e0e58243-4138-48e5-8aba-448a8888e2ff", "customer_id": "7c0cde05-4df0-47f4-94c4-978dd9f56e5c", "customer_name": "goldie", "title": "Mobile Phone", "price": "10000" } }

以上で動作確認完了

アイテムを追加してみる

ガジェットばっかなのでマウスでも追加してみます。いいやつなので5,000円します。

$ curl -s -XPOST -d '{"title":"Mouse","price":5000}' -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "item": { "id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1", "customer_id": "5010f592-3ba2-4612-a177-68551b39d509", "title": "Mouse", "price": "5000" } }

"id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1" が振られました。

customer_idはgopher君に振られたIDのよう。authorityでSignInで作ったTOKEN変数を渡してgopher君でサインインしてるっぽい。

一応一覧表示から確認してみる。

$ curl -s -XGET -H "authorization: bearer $TOKEN" localhost:30000/catalog/items | jq . { "items": [ ... { "id": "1e16c24f-b9a7-4078-80c2-3ad55e703be1", "title": "Mouse", "price": "5000" } ] }

一番下に追加された。

この一連の流れをマイクロサービスでどう処理しているのか、を調べたい。