4

【微服务】- 配置中心 - Nacos - 怒放吧德德

 1 year ago
source link: https://www.cnblogs.com/lyd-code/p/16724681.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

微服务 - 配置中心 - Nacos

🏆 一个有梦有戏的人 @怒放吧德德
🔥分享学习心得,欢迎指正,大家一起学习成长!

今天的学习任务就是学习使用Nacos作为配置中心。
努力克制自己,拒绝摆烂!

什么是配置中心

配置中心就是将各个微服务的配置集中管理,就是一种统一管理各种应用配置的基础服务组件,并且能够动态配置服务,动态配置服务。动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。

image


就像如此,用户发布/修改配置,客户端能够实时监听到改动并且跟着改变。

Nacos配置模型

对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。Nacos抽象定义了Namespace、Group、Data ID的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐给大家一种用法,如下图:

image


Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目,如XX项目
DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件
获取配置集需要指定:
1、nacos服务地址,必须指定
2、namespace,如不指定默认public
3、group,如不指定默认 DEFAULT_GROUP
4、dataId,必须指定

命名空间

namespace 隔离设计,不同空间互不干扰。
命名空间(Namespace)是用于隔离多个环境的(如开发、测试、生产),而每个应用在不同环境的同一个配置(如数据库数据源)的值是不一样的。因此,我们应针对企业项目实际研发流程、环境进行规划。如某软件公司拥有开发、测试、生产三套环境,那么我们应该针对这三个环境分别建立三个namespace。

image


通过新建命名空间,可以为不同环境设置不同的配置文件,并且不同的命名空间的配置内容是相互隔离的,并不会相互干扰,只是需要在配置的时候选中是那个命名空间,不选择则是默认的public。

配置管理

Nacos提供管理所有配置,并且可以通过命名不同来定义许多种不一样的配置。Nacos2.x提供了许多的配置文件类型,基本复合我们的开发使用。

image


选择命名空间,新建配置文件,Data ID的命名规则:



${prefix}-${spring.profile.active}.${file-extension}
  • prefix 默认为所属工程配置spring.application.name 的值,也可以通过配置spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active=dev 即为当前环境对应的 profile。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。
    Nacos还支持编辑DIFF能力,帮助用户校验修改内容,降低改错带来的风险。
    通过编辑可以对配置进行编辑,编辑的时候,dateId和Group是不能修改的,因此只能添加新的配置文件
    image

如果在nacos的配置文件中配置了数据库,就能够将配置 数据保存下来
image

实例

现在使用springcloud demo来演示一下配置中心。

1|0配置数据持久化

nacos有自带默认的存储方式,能够保留本地,还可以是通过配置数据库,从而达到数据的持久化。
首先在nacos/conf/application.properties 可以进行数据库的配置
将以下配置放在配置文件中



spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://localhost:3307/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=12356

数据库的数据是文件夹里面的nacos-mysql.sql这个文件

1|0导入依赖坐标

需要引入nacos配置坐标



<!--配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

1|0设置相关的配置

在bootstrap.yml文件中设置相关的配置



server: port: 8000 spring: application: name: service-goods cloud: nacos: server-addr: localhost:8848 discovery: ephemeral: false # false为永久实例,true表示临时实例开启,注册为临时实例 config: server-addr: localhost:8848 file-extension: yml group: DEFAULT_GROUP # 默认值 namespace: bb4fbfd3-db73-45a7-8db0-59e62c2e2dd5 # 没有指定的话就是默认 public

需要配置前缀,在application.yml文件中配置如下



spring: profiles: active: dev

1|0编写接口

通过编写一个接口来测试从配置中心中拉取配置内容。
@RefreshScope: 能够使之动态配置,只要在配置中心中修改数据,就能够跟着改动。
@Value: 就是跟springboot获取yml中的信息一样,实际上也是这样子的,只不过是把配置内容放在了nacos服务器上了



package com.lyd.demo.controller; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.lyd.demo.entity.GoodsDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.util.Map; /** * @author: lyd * @description: api * @Date: 2022/9/21 */ @RefreshScope // 动态更新配置 @RestController @RequestMapping("/api") public class GoodsController { @Autowired private RestTemplate restTemplate; @Value("${goods.name:null}") private String name; @Value("${goods.price:0.0}") private Double price; @GetMapping("/getValues") public String getConfigurationCenterValue() { return "商品名:" + name + " ,价格:" + price; } // ... }

1|0运行结果

image


今天就分享Nacos的初步使用,总体来说,Nacos在本地单机运行的时候很不稳定,容易出现问题。
👍创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得点赞哦!👍

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK