이 기사는 구성 센터 "nacos"에 대한 golang 튜토리얼 칼럼을 통해 소개되었습니다. 아래에서는 golang의 관점에서 구성 센터에 대해 설명하고 naco를 사용하여 구성하고 읽는 방법을 알아봅니다. nacos 등의 구성 파일이 도움이 필요한 친구에게 도움이 되기를 바랍니다.
구성 센터란
프로젝트의 모든 구성을 통일적으로 관리하는 데 사용되는 시스템입니다. 간단해 보이지만 이 모듈을 과소평가하지 마십시오. 중간 규모의 인터넷 프로젝트가 구성 센터 모델을 채택하지 않으면 다양한 구성 항목이 많고 불규칙한 수정 요구 사항이 많아 개발자에게 많은 골칫거리가 되고 관리가 매우 혼란스러워질 것입니다.
구성 센터의 서비스 프로세스는 다음과 같습니다. 사용자는 구성 센터에서 구성 정보를 업데이트합니다. 서비스 A와 서비스 B는 적시에 구성 업데이트 알림을 받고 구성 센터에서 구성을 가져옵니다. 일반적으로 구성 센터는 다양한 애플리케이션 구성을 일률적으로 관리하는 기본 서비스 구성 요소입니다.
시스템 아키텍처에서 구성 센터는 전체 마이크로서비스 인프라 시스템의 구성 요소입니다. 그 기능은 눈에 띄지 않는 것처럼 보이지만 구성 관리 및 액세스에 지나지 않지만 링크의 전체 마이크로서비스 아키텍처에는 없어서는 안될 요소입니다.
Nacos란 무엇입니까
Nacos
Nacos는 Naming and Configuration Service의 약어입니다. 이름에서 보면 Nacos가 중점을 두는 두 영역이 등록 센터와 구성 구성 센터임을 알 수 있습니다.
비즈니스 구성, 기능 전환, 서비스 관리의 약한 종속성 다운그레이드, 심지어 데이터베이스 비밀번호까지 모두 동적 구성 센터를 사용할 수 있습니다. 전용 구성 센터 구성 요소가 없는 경우 하드 코딩, 구성 파일, 데이터베이스, 캐시 등을 사용하여 문제를 해결합니다. 하드 코딩을 통해 구성을 수정하는 경우 구성 파일을 다시 컴파일하고 패키지해야 하며, 애플리케이션을 다시 시작해야 하며 데이터베이스 성능이 제한되고 캐시가 적시성을 잃습니다.
Nacos 구성 모델
네임스페이스 + 그룹 + dataId는 구성을 고유하게 결정합니다
네임스페이스: 클라이언트에 바인딩된 클라이언트는 네임스페이스에 해당하며 환경을 격리하거나 테넌트를 구별하는 데 사용할 수 있습니다
group : 그룹, 비즈니스 차별화
dataId: 구성된 ID
실제 시나리오에서 어떻게 사용되는지 살펴보겠습니다
예: 전자상거래 웹사이트에는 사용자 모듈, 제품 모듈, 주문 모듈, 재고 등의 모듈이 있습니다. 모듈
이러한 모듈은 모두 구성해야 하며 각 모듈마다 네임스페이스를 만드는 방법이 있습니다. 각 모듈은 개발 단계에서
구성이 필요하고 온라인으로 전환한 후 두 가지를 사용합니다. dev, pro 그룹을 구분하려면 dataId에 dev와
pro를 모두 입력해야 합니다.
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
방문: 192.168.1.103:8848/nacos/index.html 사용자 이름/비밀번호: nacos/nacos
구성 시작:
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를 사용하여 구성 파일을 읽고 SDK를 사용합니다. nacos를 가져와야 하는 항목:
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}}
물론 구성 센터와 viper 모두 실시간 모니터링 구성을 제공합니다
당신 이렇게 쓸 수 있어요:
//监听配置变化 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!