Go実践マイクロサービス--サービス発見


サービスの登録発見はマイクロサービスにとって非常に重要な一環であり、単一アーキテクチャアプリケーションではサービス間の相互呼び出しは、固定されたhostとportによってRESTまたはRPCを開始することによって呼び出されるが、マイクロサービスアーキテクチャでは、各サービスは動的に変化することが多い.したがって、クライアントの要求を動的サービスインスタンスに送信するために、サービス発見メカニズムが必要である.
go microを利用してサービス発見を実現するのは便利で、microではデフォルトでConsulを使用してサービス発見をサポートしています.もちろん、プラグインメカニズム(go-plugins)を使用してEtcd、Gossip、NATSなどの他のサードパーティサービス登録発見ツールもサポートしています.各サービスが起動するたびにregistryに自分を登録し、終了時にも自動的に登録を解除します.具体的にはgo-micro/serviceを見てみましょう.goの関連コードクリップ:
......

func (s *service) run(exit chan bool) {
    if s.opts.RegisterInterval <= time.Duration(0) {
        return
    }

    //      
    t := time.NewTicker(s.opts.RegisterInterval)

    for {
        select {
        case 

Consulの使用については「Consul概要とクイック入門」を参照してください.以下では、主にホテルの予約の例を利用して、Go MicroがConsulのクラスタをどのように使用してサービス発見を行うかを見てみましょう.
例では、Microコンポーネント内のマイクロサービスAPIゲートウェイの実装であるMicro API APIが使用され、APIゲートウェイモードは、サービスに適切なバックエンドサービスに動的にルーティングされたエントリを提供し、それを利用してサービス発見、負荷バランス、符号化、RPCベースの通信を行うことができる.
Micro APIが提供するHTTP APIは以下の通りである.
- /[service]/[method]    # HTTP       services
- /rpc #              service

例では、go-microクライアントが要求主体をRPC要求に転送するデフォルトのハンドラの代わりに、Micro APIを使用したRPC Handlerを使用します.具体的なMicro APIの使用とRESTマッピング規則は、ドキュメントを表示することができます.https://micro.mu/docs/api.html
このホテルの予約サービスは公式micro/examplesのbooking例を利用して書き換えられ、具体的なコード=>https://github.com/yuansir/go...
.
├── README.md
├── api
│   └── hotel   # booking service
├── data    # data
│   ├── bindata.go
│   ├── customers.json
│   ├── locations.json
│   ├── profiles.json
│   └── rates.json
├── docker-compose.yml # docker compose file
└── srv # services
    ├── auth    # auth token servce
    ├── geo     # geo service
    ├── profile # profile service
    └── rate    # rate service

docker-compose.yml
version: '3'

services:
  consul-agent-1: &consul-agent
    image: consul:latest
    networks:
      - consul-cluster
    command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"

  consul-agent-2:
    <<: consul-agent-3:="" consul-server-1:="" command:="" consul-server-bootstrap="" consul-server-2:="" consul-server-bootstrap:="" ports:="" auth:="" build:="" .="" networks:="" consul-cluster="" links:="" geo:="" profile:="" rate:="" api:="" auth="" geo="" profile="" rate="" micro:="" api="" image:="" microhq="" consul-cluster:=""/>

consulは、データセンターごとに少なくとも1台のserverを有する必要があり、1つのクラスタに3つまたは5つのserverがあることを推奨する.単一のサーバを配備すると、失敗した場合にデータの損失が避けられない.-bootstrap-expectオプションは、Consulが追加することを期待しているserverノードの数を示します.各サービスの--registry_addressは、登録されたサービス発見レジストリアドレスを設定することである.docker-compose up以降はconsulのweb uiでServiceの状態を確認できます.
転載は明記してください:Ryanから転載して菜鳥です
もしこの文章があなたにとって非常に有益だと思ったら,何か賞をあげましょうか.
本明細書のリンクアドレス:Go実践マイクロサービス--サービス発見