由网络副手--寻路人于2022.05.18 00:23:00发布在Go语言,企业技术支持 八、搭建Nacos 配置中心 & 代码整合 阅读1208 评论0 喜欢0 ## 一、前言 1、解决痛点 1.1 系统配置文件变更即时生效 1.2 通过平台化存储更改配置 2、不能解决什么问题? 2.1 程序中使用单例不重启不会生效 ## 二、配置安装 ### 2.0.1 安装 ``` #一、安装,官网推荐的稳定版本为2.0.3 wget https://github.com/alibaba/nacos/releases/download/2.0.3/nacos-server-2.0.3.tar.gz #二、安装 & 配置 sudo mkdir /usr/local/nacos-server-2.0.3 sudo tar -xzvf nacos-server-2.0.3.tar.gz -C /usr/local/nacos-server-2.0.3 sudo mv /usr/local/nacos-server-2.0.3/nacos/* /usr/local/nacos-server-2.0.3/ ``` ### 2.0.2 、JAVA配置 ``` JAVA 在安装jenkins 的时候已经安装完毕了,如果未配置请参考 https://note.youdao.com/s/8bqA3Bv5 中java 配置环节. 查看 /etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_131 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH ``` ### 2.0.3 、设置开机启动 ``` vim /lib/systemd/system/nacos.service [Unit] Description=nacos After=network.target [Service] Type=forking ExecStart=/usr/local/nacos-server-2.0.3/bin/startup.sh -m standalone ExecReload=/usr/local/nacos-server-2.0.3/bin/shutdown.sh ExecStop=/usr/local/nacos-server-2.0.3/bin/shutdown.sh PrivateTmp=true [Install] WantedBy=multi-user.target ------------ #重载所有服务 systemctl daemon-reload #设置开机启动 systemctl enable nacos.service #查看开机启动状态 systemctl is-enabled nacos.service #查看启动状态 systemctl status nacos.service #启动服务 systemctl start nacos.service ``` ### 2.0.4 、通过 systemctl start nacos.service 执行报错,手动切换到目录执行可以 ``` 5月 04 20:57:46 slave-beta-server startup.sh[21063]: which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin) 5月 04 20:57:46 slave-beta-server startup.sh[21063]: readlink: missing operand 5月 04 20:57:46 slave-beta-server startup.sh[21063]: Try 'readlink --help' for more information. 5月 04 20:57:46 slave-beta-server startup.sh[21063]: dirname: missing operand 5月 04 20:57:46 slave-beta-server startup.sh[21063]: Try 'dirname --help' for more information. 解决方案: vim startup.sh , 在头部增加 source /etc/profile 进行变量生效即可 ``` ###2.1 效果图  ###2.2 安装路径 1、配置 nacos.xxxx.vip 服务可访问域名 2、projectEnv := strings.ToLower(os.Getenv("APP_ENV")) 通过服务启动传ENV 3、在代码整合时候配置 DataId、Group, 其中ID 信息以配置后台的名称命名,注意规范 DataId: fmt.Sprintf("api.xxxx.vip_%s", projectEnv), Group: projectEnv, ## 三、GO 代码整合 ### 3.1 GO 代码整合 config/config.go ``` type Config struct { Yaml *yamls } type yamls struct { DB db `yaml:"database"` Assets assets `yaml:"assets"` Jwt jwt `yaml:"jwt"` Pay pay `yaml:"pay"` PayLianLian payLianLian `yaml:"pay_lian_lian"` PayHee payHee `yaml:"pay_hee"` Wxh5 wxh5 `yaml:"wxh5"` Wxapp wxapp `yaml:"wxapp"` Sms sms `yaml:"sms"` Exchange exchange `yaml:"exchange"` //Iris iris.IrisConf `yaml:"iris"` //RecordBaseTx types.BaseTx `yaml:"record_base_tx"` //平台存证操作账户 Redis redis `yaml:"redis"` Appcode appcode `yaml:"appcode"` SuperDt superDt `yaml:"super_dt"` AliYunAfs AliYunAfs `yaml:"aliyun_asf"` } func ConfInstance() *Config { confOnce.Do(func() { Conf = new(Config) //读取配置文件 ---在服务启动的最开始 //Conf.initYaml(*file) Conf.initNaCosCnf() }) } func (c *Config) initNaCosCnf() { projectEnv := strings.ToLower(os.Getenv("APP_ENV")) if projectEnv == "" { projectEnv = "online" } clientConfig := constant.ClientConfig{ AppName: "muse-api", TimeoutMs: 5000, NamespaceId: fmt.Sprintf("%s_id", projectEnv), NotLoadCacheAtStart: true, LogDir: utils.GetEnvDefault("logs_path", "logs/"), CacheDir: utils.GetEnvDefault("logs_path", "logs/"), //LogLevel: "debug", } serverConfigs := []constant.ServerConfig{ { IpAddr: "nacos.xxxx.vip", ContextPath: "/nacos", Port: 80, Scheme: "http", }, } configClient, err := clients.NewConfigClient( vo.NacosClientParam{ ClientConfig: &clientConfig, ServerConfigs: serverConfigs, }, ) content, err := configClient.GetConfig(vo.ConfigParam{ DataId: fmt.Sprintf("api.xxxx.vip_%s", projectEnv), Group: projectEnv}) if err != nil { logger.AppLog.Error("获取配置信息出错", err) } err = yaml.Unmarshal([]byte(content), &c.Yaml) if err != nil { logger.AppLog.Error("yaml解析配置文件出错", err) } // 动态监听 err = configClient.ListenConfig(vo.ConfigParam{ DataId: fmt.Sprintf("api.xxxx.vip_%s", projectEnv), Group: projectEnv, OnChange: func(namespace, group, dataId, data string) { err = yaml.Unmarshal([]byte(data), &c.Yaml) if err != nil { logger.AppLog.Error("监听配置出错,", err) } }, }) if err != nil { logger.AppLog.Error("动态监听配置文件出错,", err) } } ``` ### 程序代码整合完毕,启动处理 ``` ### 启动流程 的参数 APP_ENV="online" 就是为了配合上面nacos 而设置的参数 vim /etc/supervisord.d/api-xxx.ini command=/mysite/project-app/project-app environment=APP_ENV="online",logs_path="/mysite/logs/project-app" directory= /mysite/project-app user=workuser autostart=true autorestart=true startsecs=3 stdout_logfile=/mysite/logs/project-app/api_log1.out stdout_logfile_maxbytes=20MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/mysite/logs/project-app/api_log2.out stderr_logfile_maxbytes=10MB stderr_logfile_backups=10 stderr_capture_maxbytes=10MB ``` 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人