ホームページ >バックエンド開発 >Golang >コンフィギュレーションセンターnacosのインストール方法と使い方を詳しく解説した記事

コンフィギュレーションセンターnacosのインストール方法と使い方を詳しく解説した記事

藏色散人
藏色散人転載
2022-11-14 16:44:543079ブラウズ

この記事は、golang チュートリアル コラムで構成センター「nacos」について紹介しています。以下では、golang の観点から構成センターについて、naco のインストールとその方法について学びます。 nacos を設定に使用し、nacos で設定を読み取るためのドキュメントなど。必要な友人の役に立てば幸いです。

コンフィギュレーションセンターnacosのインストール方法と使い方を詳しく解説した記事

#コンフィギュレーション センターとは

プロジェクト内のすべてのコンフィギュレーションを一元管理するために使用されるシステム。簡単そうに見えますが、このモジュールを過小評価しないでください。中規模のインターネット プロジェクトが構成センター モデルを採用しない場合、多数のさまざまな構成項目とさまざまな不規則な変更要件が開発者に多大な頭痛の種を与え、管理を非常に混乱させることは間違いありません。

構成センターのサービス プロセスは次のとおりです。ユーザーは構成センターの構成情報を更新します。サービス A とサービス B は、構成更新通知を適時に受信し、構成センターから構成を取得します。一般に、構成センターは、さまざまなアプリケーション構成を一元管理する基本的なサービス コンポーネントです。

システム アーキテクチャにおいて、構成センターはマイクロサービス インフラストラクチャ システム全体のコンポーネントであり、その機能は構成管理とアクセスにすぎず目立たないように見えますが、マイクロサービス アーキテクチャ全体です。 。

nacos とは

Nacos

Nacos は Naming and Configuration Service の略称で、その名前から 2 つの分野に注力していることがわかります。それは、登録センターおよび構成設定センターであるネーミングです。

ビジネス構成、機能の切り替え、サービス管理における弱い依存関係のダウングレード、さらにはデータベースのパスワードもすべて動的構成センターを使用する場合があります。専用の構成センター コンポーネントがない場合は、ハード コーディング、構成ファイル、データベース、キャッシュなどを使用して問題を解決します。ハードコーディングによって構成を変更する場合、構成ファイルを再コンパイルしてパッケージ化し、アプリケーションを再起動する必要があるため、データベースのパフォーマンスが制限され、キャッシュの適時性が失われます。

Nacos 構成モデル

ネームスペース グループ dataId は構成を一意に決定します

  • ネームスペース: クライアントにバインドされ、1 つのクリネットが 1 つのネームスペースに対応し、利用可能環境を分離するか、テナントを区別します

  • group: グループ、ビジネスを区別します

  • dataId: 構成済み ID

実際のシナリオでどのように使用されるかを見てみましょう

例: 電子商取引 Web サイトには次のモジュールがあります: ユーザー モジュール、製品モジュール、注文モジュール、在庫モジュール

これにはいくつかのモジュールが必要です構成する必要があり、構成が異なります。これが、モジュールごとに名前空間を作成する方法です。各モジュールには、開発段階での

構成と、オンラインになった後の構成が必要です。開発には 2 つのグループがあります。 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 を使用して構成ファイルを読み取り、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}}

もちろん、設定センターと 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。