Micro - Golang learning step 10-3

  • 公開日
  • カテゴリ:ToolForMicroservices
  • タグ:Golang,roadmap.sh,学習メモ
Micro - Golang learning step 10-3

roadmap.sh > Go > Tool for Microservices > Micro の学習を進めていきます。

※ 学習メモとしての記録ですが、後にこのセクションを学ぶ道しるべとなるよう、ですます調で記載しています。

contents

  1. 開発環境
  2. 参考 URL
  3. Micro
  4. Micro のインストール
  5. micro サーバーの起動と認証
  6. サービスの作成
  7. Protocol Buffers のコンパイル
  8. サービスの起動
  9. 動作確認
  10. micro コマンド

開発環境

  • チップ: Apple M2 Pro
  • OS: macOS Sonoma
  • go version: go1.23.2 darwin/arm64

参考 URL

Micro

Microは、Go言語でマイクロサービスを開発・管理するためのプラットフォームです。サービスディスカバリや通信プロトコルの管理など、マイクロサービス開発に必要な基本機能を提供し、開発者が複雑な分散システムを簡潔に扱えるよう支援します。

Micro のインストール

Micro は Go のパッケージとして提供されています。以下のコマンドでインストールします。

go install github.com/micro/micro/v5/cmd/micro@master

インストール後、micro コマンドが使用可能になります。バージョンを確認して、正しくインストールされたことを確認してください。

micro --version

micro サーバーの起動と認証

micro サーバーを起動します。

micro server

起動したら、別の画面から以下コマンドを実行し、環境設定を local に切り替えます。

micro env set local

なお、環境設定は以下コマンドで確認可能です。

micro env

また、micro サーバーには auth サービスが稼働しており、サーバーのステータスを確認したり、エンドポイントにリクエストするために予め認証しておく必要があります。

micro login で認証を実施します。

micro login

Enter username: admin
Enter password: micro

ここまでで micro サーバーの初期設定は完了です。

サービスの作成

Microには、新しいサービスの雛形を作成するためのコマンドが用意されています。以下のコマンドで、helloworldという名前のサービスを作成します。

micro new helloworld

このコマンドにより、以下のようなディレクトリ構成が生成されます。

helloworld/
├── main.go
├── handler
│   └── helloworld.go
├── proto
│   └── helloworld.proto
├── dep-install.mk
├── Makefile
├── README.md
├── .gitignore
└── go.mod

Protocol Buffers のコンパイル

サービス間通信にはgRPCを使用します。そのため、Protocol Buffers(.protoファイル)から Go のコードを生成する必要があります。以下のコマンドで、必要なツールをインストールします。

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install github.com/micro/micro/v2/cmd/protoc-gen-micro@latest

次に、Makefile を使用してプロトコルバッファをコンパイルします。

cd helloworld
make init
make proto
go mod tidy
go mod vendor

サービスの起動

以下のコマンドでサービスを起動します

micro run .

micro status でサービスの状態を確認できます

micro status

NAME            VERSION SOURCE                            STATUS  BUILD   UPDATED         METADATA
helloworld      latest  /path/to/projectroot/helloworld   running n/a     36m29s ago      owner=admin, group=micro

動作確認

micro コマンドでサービスにリクエストを送信します。

リクエスト:

micro call helloworld Helloworld.Call '{"name": "taro"}'

# または

micro helloworld call --name=taro

レスポンス:

{
        "msg": "Hello taro"
}

curl コマンドからでもリクエストを送信できます。

リクエスト:

curl "http://localhost:8080/helloworld/Call?name=taro"

レスポンス:

{
        "msg": "Hello taro"
}

micro コマンド

NAME:
micro - API first development platform

USAGE:
micro [global options] command [command options]

VERSION:
latest

COMMANDS:
auth      Manage authentication, accounts and rules
call      Call a service e.g micro call greeter Say.Hello '{"name": "John"}'
config    Manage configuration values
env       Get/set micro cli environment
gen       Generate a micro related dependencies e.g protobuf
get       Get resources from micro
init      Generate a profile for micro plugins
kill      Kill a service: micro kill [source]
login     Interactive login flow.
logout    Logout.
logs      Get logs for a service e.g. micro logs helloworld
new       Create a service template
run       Run a service: micro run [source]
server    Run the micro server
service   
services  List services in the registry
shutdown  Shutdown a micro server
status    Get the status of services
store     Commands for accessing the store
stream    Create a service stream e.g. micro stream foo Bar.Baz '{"key": "value"}'
update    Update a service: micro update [source]
user      Print the current logged in user
web       Run the micro web UI
help, h   Shows a list of commands or help for one command

GLOBAL OPTIONS:
-c value               Set the config file: Defaults to ~/.micro/config.json [$MICRO_CONFIG_FILE]
--env value, -e value  Set the environment to operate in [$MICRO_ENV]
--namespace value      Namespace the service is operating in (default: "micro") [$MICRO_NAMESPACE]
--client_id value      Account ID used for client authentication [$MICRO_CLIENT_ID]
--client_secret value  Account secret used for client authentication [$MICRO_CLIENT_SECRET]
--public_key value     Public key for JWT auth (base64 encoded PEM) [$MICRO_PUBLIC_KEY]
--private_key value    Private key for JWT auth (base64 encoded PEM) [$MICRO_PRIVATE_KEY]
--name value           Set the service name [$MICRO_SERVICE_NAME]
--profile value        Set the micro server profile: e.g. local or kubernetes [$MICRO_SERVICE_PROFILE]
--network value        Service network address [$MICRO_SERVICE_NETWORK]
--help, -h             show help
--version, -v          print the version

まとめ

公式リファレンスがドメイン切れで参照できないため詳細が追えないためここまでとする。



[Next] Step 10-4: go-zero

[Prev] Step 10-2: Rpcx

Author

rito

  • Backend Engineer
  • Tokyo, Japan
  • PHP 5 技術者認定上級試験 認定者
  • 統計検定 3 級