前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务系列 | Nacos云原生配置中心应用

微服务系列 | Nacos云原生配置中心应用

作者头像
Tinywan
发布2024-06-18 15:37:04
1480
发布2024-06-18 15:37:04
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

本文主要学习和使用 nacos 配置中心,从 nacos 配置中心原理出发,深入到实际项目中的nacos配置中心使用。应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。应用程序根据配置改变自身的行为,但一般程序不会去修改配置。

对于配置,大家在日常开发中应该很熟悉。配置的加载有多种方式,其中硬写代码在应用中的方式最不可取的,而配置文件、环境变量、启动参数、甚至数据库的方式。

在微服务架构中多机器、多应用、多实例的情况下也有很大不足,会使得配置分散,不易于管理。想象一下,如果你启动了一个服务的多个实例,一旦配置需要更改,在没有配置中心的情况,你得将每个实例的配置信息改一遍,这将是非常繁琐且低效的工作。

配置中心就是一种统一管理各种应用配置的基础服务组件,它将将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置。

什么是Nacos?

Nacos 致力于帮助您发现、配置和管理微服务;是微服务/SOA架构体系中服务治理环节的重要成员服务;简单的可以把Nacos理解为一个配置中心和一个服务注册中心。

什么时候用Nacos?
  • 当我们的服务越来越大、越来越复杂,需要配置的地方越来越多,配置存放的地方也越来越多的时候,为了可以方便统一管理配置,这时候就可以引入Nacos。
  • 当我们的服务越来越多,有些时候部署需要做到弹性伸缩,需要用到一些负载策略的时候,可以引入Nacos进行服务的治理。
nacos 基本配置信息
  • namespace:命名空间,默认public,标识不同执行环境,如:devtestprod
  • group :组标识,默认DEFAULT_GROUP,标识不同项目,如:ORDER_GROUPUSER_GROUP
  • DataId:文件唯一标识,简单理解为文件名(在同组中唯一)。

如:dev_ORDER_GROUP_application.yaml 表示dev环境_订单项目_ application.yaml配置文件。

配置中心使用

nacos 服务端

这里使用Docker 快速开始,详细可以参考官方文档:https://nacos.io/zh-cn/docs/quickstart/quick-start-docker/

部署登录成功界面如下所示:

nacos 客户端

客户端使用兔子大佬的webman的nacos插件:https://www.workerman.net/plugin/50

安装

代码语言:javascript
复制
composer require workbunny/webman-nacos

配置配置文件plugin/workbunny/webman-nacos/app.php

代码语言:javascript
复制
    ...
    'host' => '192.168.3.29',
    'port' => 8848,
    'username' => 'nacos',
    'password' => 'nacos',
    ...

以上配置文件主要修改一下nacos的主机端口以及账号和密码。配置完确认无误后,就可以启动webman了。

启动界面如下所示:

配置文件

新建webman命名空间

webman命名空间下新增config.yaml配置文件

config.yaml配置文件内容

代码语言:javascript
复制
# Redis配置
redis:
  master:
    host: '192.168.3.29'
    port: 6379
    password: '123456'
# MySQL数据库
mysql:
  master:
    host: '127.0.0.8'
    port: 3306
    username: 'root'
    password: '123456'

项目中动态读取配置

运行项目查看配置结果是否一致。定义测试控制器IndexController,读取redis默认配置项代码

代码语言:javascript
复制
<?php
/**
 * @desc 微服务系列 | Nacos云原生配置中心介绍与使用
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/16 20:14
 */
declare(strict_types=1);

namespace app\controller;

use support\Request;
use support\Response;

class IndexController
{
    /**
     * @desc nacos
     * @param Request $request
     * @return Response
     * @author Tinywan(ShaoBo Wan)
     */
    public function nacos(Request $request): Response
    {
        $config = \config('redis.default');
        return json(['code' => 0, 'msg' => 'ok', 'data' => $config]);
    }
}

访问地址:http://127.0.0.1:8787/index/nacos

请求结果如下:

代码语言:javascript
复制
{
    "code": 0,
    "msg": "ok",
    "data": {
        "host": "192.168.3.29",
        "port": 6379,
        "password": "123456",
        "database": 0
    }
}

尝试修改nacos配置中心redis配置的密码配置,由123456修改为nacos-resty-123456

修改前后内容比较

webman终端监控日志打印输出

代码语言:javascript
复制
POST /nacos/v1/cs/configs/listener?Listening-Configs=config.yaml%02DEFAULT_GROUP%0294dcc283232b714a5ea3fe4d411b308e%0225cb4090-bb73-4134-aa49-7292b6755b22%01&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODQ4NTkzMH0.A4W57FBg02RR-UQ8omz7Z4RhWVxlMZ7svykin-bNQcs HTTP/1.1
Host: 192.168.3.29:8848
User-Agent: workerman/http-client
Connection: keep-alive, keep-alive
Long-Pulling-Timeout: 30000


/var/www/plugin.admin.webman/config.yaml update and reload. 
Workerman[start.php] reloading
POST /nacos/v1/cs/configs/listener?Listening-Configs=config.yaml%02DEFAULT_GROUP%029baa48521801e997b2fb2e0a2d47cafb%0225cb4090-bb73-4134-aa49-7292b6755b22%01&accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcxODQ4NTkzNX0.M8CXTy7f_xuTM4cpNqcpaMMIyeENw3eghtcNSoA2Oik HTTP/1.1
Host: 192.168.3.29:8848
User-Agent: workerman/http-client
Connection: keep-alive, keep-alive
Long-Pulling-Timeout: 30000

通过项目重新读取配置信息

代码语言:javascript
复制
{
    "code": 0,
    "msg": "ok",
    "data": {
        "host": "192.168.3.29",
        "port": 6379,
        "password": "nacos-resty-123456",
        "database": 0
    }
}

查看历史修改记录的详情

可以通过历史记录进行回滚

监听查询

小结

本文主要介绍了webman如何集成Nacos作为配置中心。本次主要通过webman nacos插件来使用Nacos作为配置中心和发现中心,代码示例仅展示配置中心的使用,发现中心的使用建议参考官方文档说明。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Nacos?
  • 什么时候用Nacos?
  • nacos 基本配置信息
  • 配置中心使用
    • nacos 服务端
      • nacos 客户端
      • 配置文件
      • 项目中动态读取配置
      • 小结
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档