この記事は、golang チュートリアル コラムで構成センター「nacos」について紹介しています。以下では、golang の観点から構成センターについて、naco のインストールとその方法について学びます。 nacos を設定に使用し、nacos で設定を読み取るためのドキュメントなど。必要な友人の役に立てば幸いです。
#コンフィギュレーション センターとは
プロジェクト内のすべてのコンフィギュレーションを一元管理するために使用されるシステム。簡単そうに見えますが、このモジュールを過小評価しないでください。中規模のインターネット プロジェクトが構成センター モデルを採用しない場合、多数のさまざまな構成項目とさまざまな不規則な変更要件が開発者に多大な頭痛の種を与え、管理を非常に混乱させることは間違いありません。 構成センターのサービス プロセスは次のとおりです。ユーザーは構成センターの構成情報を更新します。サービス A とサービス B は、構成更新通知を適時に受信し、構成センターから構成を取得します。一般に、構成センターは、さまざまなアプリケーション構成を一元管理する基本的なサービス コンポーネントです。 システム アーキテクチャにおいて、構成センターはマイクロサービス インフラストラクチャ システム全体のコンポーネントであり、その機能は構成管理とアクセスにすぎず目立たないように見えますが、マイクロサービス アーキテクチャ全体です。 。nacos とは
NacosNacos は Naming and Configuration Service の略称で、その名前から 2 つの分野に注力していることがわかります。それは、登録センターおよび構成設定センターであるネーミングです。 ビジネス構成、機能の切り替え、サービス管理における弱い依存関係のダウングレード、さらにはデータベースのパスワードもすべて動的構成センターを使用する場合があります。専用の構成センター コンポーネントがない場合は、ハード コーディング、構成ファイル、データベース、キャッシュなどを使用して問題を解決します。ハードコーディングによって構成を変更する場合、構成ファイルを再コンパイルしてパッケージ化し、アプリケーションを再起動する必要があるため、データベースのパフォーマンスが制限され、キャッシュの適時性が失われます。 Nacos 構成モデルネームスペース グループ dataId は構成を一意に決定しますNacos のインストール
ここでは、インストールに docker を直接使用しますNacos のインストール (docker)
docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -d nacos/nacos-server:latest
docker container update --restart=always xxx
設定には nacos を使用します
nacos が正常に起動したら、192.168.1.103:8848/nacos/index.html にアクセスしてください。名前空間を作成できます。新しいユーザー モジュール ユーザーを作成します。作成が成功したら、対応する ID が表示されます (例: 7ae18f62-e2b9-48bd-bff2-a49e7443f5bc)。次に、ユーザー名前空間の下に新しい構成ファイルを作成し、対応する名前 (dataId) とグループを入力します。新しい josn 設定ファイルを作成します :{ "name": "user-web", "host": "10.2.106.169", "port": 9091, "tags":["iceymoss", "goods", "golang", "web"], "user_srv":{ "name": "user-srv", "host": "10.2.106.169", "port": 8081 }, "jwt":{ "key": "dfijdfjidhfjijdfbdfdFwohPd6XmVCdnQi" }, "sms":{ "key": "mykey", "secret": "mysecret" }, "params":{ "sign_name": "生鲜小店", "code": "SMS_244610581" }, "redis":{ "host": "127.0.0.1", "port": 6379, "expir": 300 }, "verify":{ "width": 5 }, "consul":{ "host": "10.2.106.169", "port": 8500 }, "tracing":{ "host": "127.0.0.1", "port": 6831, "name": "shopping" } }
nacos で設定ファイルを読み取ります
# #依存関係のプルgo を使用して構成ファイルを読み取り、nacos をプルする必要がある SDK を使用します。
go get github.com/nacos-group/nacos-sdk-go/clients go get github.com/nacos-group/nacos-sdk-go/common/constant go get github.com/nacos-group/nacos-sdk-go/vo
#設定を読む前に、まず設定マッピングの構造を書きます。
ディレクトリ構造:nacos_test ├── config │ └── config.go └── main.go
package config //UserSerConfig 映射用户配置 type UserSerConfig struct { Name string `mapstructure:"name" json:"name"` Host string `mapstructure:"host" json:"host"` Port int `mapstructure:"port" json:"port"` } //JWTConfig 映射token配置 type JWTConfig struct { SigningKey string `mapstructure:"key" json:"key"` } //AliSmsConfig 阿里秘钥 type AliSmsConfig struct { Apikey string `mapstructure:"key" json:"key"` ApiSecret string `mapstructure:"secret" json:"secret"` } //ParamsConfig 短信模板配置 type ParamsConfig struct { SignName string `mapstructure:"sign_name" json:"sign_name"` TemplateCode string `mapstructure:"code" json:"code"` } //RedisConfig redis数据库配置 type RedisConfig struct { Host string `mapstructure:"host" json:"host"` Port int `mapstructure:"port" json:"port"` Expir int `mapstructure:"expir" json:"expir"` } //Verifier 手机验证长度 type Verifier struct { Width int `mapstructure:"width" json:"width"` } type ConsulConfig struct { Host string `mapstructure:"host" json:"host"` Port int `mapstructure:"port" json:"port"` } //ServerConfig 映射服务配置 type ServerConfig struct { Name string `mapstructure:"name" json:"name"` Port int `mapstructure:"port" json:"port"` UserSerInfo UserSerConfig `mapstructure:"user_srv" json:"user_srv"` JWTInfo JWTConfig `mapstructure:"jwt" json:"jwt"` AliSms AliSmsConfig `mapstructure:"sms" json:"sms"` Params ParamsConfig `mapstructure:"params" json:"params"` Redis RedisConfig `mapstructure:"redis" json:"redis"` Verify Verifier `mapstructure:"verify" json:"verify"` ConsulInfo ConsulConfig `mapstructure:"consul" json:"consul"` }
package main import ( "StudyGin/nacos/config" "encoding/json" "fmt" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" ) func main() { //服务端配置, nacos运行的socket sc := []constant.ServerConfig{ { IpAddr: "10.2.81.102", Port: 8848, }, } //客服端配置 cc := constant.ClientConfig{ NamespaceId: "7ae18f62-e2b9-48bd-bff2-a49e7443f5bc", // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "tmp/nacos/log", CacheDir: "tmp/nacos/cache", //RotateTime: "1h", //MaxAge: 3, LogLevel: "debug", } configClient, err := clients.CreateConfigClient(map[string]interface{}{ "serverConfigs": sc, "clientConfig": cc, }) if err != nil { panic(err) } //获取配置 content, err := configClient.GetConfig(vo.ConfigParam{ DataId: "user-web.json", Group: "dev"}) if err != nil { panic(err) } Config := &config.ServerConfig{} //将配置信息读取到config.ServerConfig{}对象中 err = json.Unmarshal([]byte(content), &Config) if err != nil { panic(err) } fmt.Println(Config) }
&{user-web 9091 {user-srv 10.2.106.169 8081} {dfijdfjidhfjijdfbdfdFwohPd6XmVCdnQi} {mykey mysecret} {生鲜小店 SMS_244610581} {127.0.0.1 6379 300} {5} {10.2.106.1600}}
//监听配置变化 err = configClient.ListenConfig(vo.ConfigParam{ DataId: "user-web", Group: "DEV", OnChange: func(namespace, group, dataId, data string) { fmt.Println("配置文件变化") fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data) }, }) time.Sleep(3000 * time.Second)
以上がコンフィギュレーションセンターnacosのインストール方法と使い方を詳しく解説した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。