Consul を使用して、Beego でサービスの登録と検出を実装する
Consul は、HashiCorp によって開発されたサービス検出および構成ツールであり、これを使用して、マイクロサービス サービスの検出、ヘルス チェック、ルーティング、およびその他の機能を実装できます。 BeegoはGo言語をベースに開発された豊富な機能と拡張性を備えたWebフレームワークです。この記事では、Consul を使用して、Beego にサービスの登録と検出機能を実装する方法を紹介します。
まず、Consul をインストールする必要があります。公式 Web サイトから Consul バイナリ ファイルをダウンロードして解凍することも、パッケージ管理ツールを使用してインストールすることもできます。ダウンロードと解凍方法について説明します。
Go 言語環境と Beego フレームワークをインストールした後、Beego が提供するコマンド ライン ツールを使用して新しいプロジェクトを作成できます。コマンド ラインに次のコマンドを入力します:
bee new myproject
(myproject
はプロジェクト名です。) このコマンドを実行すると、現在のディレクトリに myproject
という名前の新しいプロジェクトが作成されます。
Consul の Go 言語クライアント ツールをインストールするには、次のコマンドを使用できます:
go get github.com/hashicorp/consul/api
Consul を導入した後Consul の API は、その言語で書かれたプログラムで使用されます。
コード内で Consul クライアント オブジェクトを作成し、Consul サーバーに接続します。
config := api.DefaultConfig() config.Address = "127.0.0.1:8500" // Consul服务器地址 client, err := api.NewClient(config) if err != nil { log.Fatal(err) }
HTTP サービスを作成し、そのサービスを Consul に登録します。
service := &api.AgentServiceRegistration{ ID: "beego-service", Name: "beego", Address: "127.0.0.1", Port: 8080, } check := &api.AgentServiceCheck{ HTTP: "http://127.0.0.1:8080/health", Timeout: "3s", Interval: "5s", DeregisterCriticalServiceAfter: "60s", } service.Check = check err = client.Agent().ServiceRegister(service) if err != nil { log.Fatal(err) }
コード内で service
オブジェクトを作成し、サービスの ID、名前、アドレス、ポートを設定します。ラベル、負荷分散など、サービスの他のプロパティを設定することもできます。 check
このオブジェクトはサービスのヘルス チェックを表します。HTTP または TCP プロトコルを設定したり、チェック機能をカスタマイズしたりできます。最後に、service
を Consul サーバーに登録します。
Consul サーバーからサービスを取得する方法は非常に簡単です。サービス クエリ オブジェクトを作成し、Catalog().Service()
メソッドを呼び出すだけです。
services, _, err := client.Catalog().Service("beego", "", nil) if err != nil { log.Fatal(err) } for _, service := range services { fmt.Println(service.ServiceID) }
上記のコードでは、beego
という名前のサービス クエリ オブジェクトが作成されます。 Catalog().Service()
メソッドを使用して、beego
として登録されているすべてのサービスを取得します。サービス リストを繰り返し処理し、各サービスの ID を出力します。
最後のステップは、サービス検出を使用して Beego の API を呼び出すことです。 Beego のコントローラーでは、次のコードを使用して、Consul サーバーからサービスのアドレスとポートを取得できます。
config := api.DefaultConfig() config.Address = "127.0.0.1:8500" client, err := api.NewClient(config) if err != nil { log.Fatal(err) } services, _, err := client.Catalog().Service("beego", "", nil) if err != nil { log.Fatal(err) } if len(services) == 0 { log.Fatal("no available beego services") } service := services[0] url := fmt.Sprintf("http://%s:%v", service.Address, service.Port) req, err := http.NewRequest("GET", url, nil) if err != nil { log.Fatal(err) } resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } c.Ctx.WriteString(string(body))
Catalog().Service()
メソッドを使用して、 beego
サービスのリストとして登録します。いずれかのサービスを選択し、そのアドレスとポートを取得します。次に、net/http
ライブラリの関数を使用して HTTP リクエストを開始し、サービスの応答結果を取得します。
これまでのところ、Consul を使用して Beego のサービス登録および検出機能を実装することに成功しています。 Consul は、軽量のサービス検出ツールとして、サービス アーキテクチャの管理に一定の助けを提供できる、シンプルで使いやすい API を提供します。 Consul を使用すると、サービスの健全性、ルーティング、負荷分散、その他の機能を簡単に管理できます。
以上がConsul を使用して Beego でサービスの登録と検出を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。