SpringCloudAlibaba-Nacos

本文详述了SpringCloudAlibaba-Nacos的配置与使用,包括Endpoint服务端点的访问,Nacos客户端信息缓存机制,NacosConfig配置中心的配置与动态更新,以及数据持久化和集群部署。通过yaml方式配置远程配置,多环境支持,并介绍了Nacos数据模型和数据持久化至MySQL。最后探讨了Nginx在Nacos集群中的应用,实现负载均衡。
摘要由CSDN通过智能技术生成

SpringCloudAlibaba -Nacos

EndPoint 服务端点

spring-cloud-starter-alibaba-nacos-discovery 在实现的时候提供了一个EndPoint 服务端点。可以通过访问

http://localhost:port/actuator/nacos-discovery

获得关于某个端口下的服务的相关信息。

subscribe: 显示了当前有哪些服务订阅者

NacosDiscoveryProperties: 显示了当前服务实例关于Nacos的基础配置


Nacos客户端信息缓存

Nacos关闭以后,继续访问服务仍然可以使用。Nacos不关闭,服务关闭。被调用过的服务也会存在在Nacos中一小会儿。

Nacos对于调用过的服务会有缓存,缓存到metadata的Map中。可以降低Nacos的压力,后续的调用直接中缓存中返回结果。实现高可用。


Nacos Config 配置中心

image-20210722102608017

在Nacos中配置管理中的配置列表下,新建配置:

image-20210722103002620

所有带*号的必须填写。Data ID :填写服务的名字(也就是每个服务中配置文件中的spring.application.name)

image-20210722103237378

Group : 服务分组,默认为DEFAULT_GROUP。更改分组需要在改配置服务中的bootstrap.properties下使用配置更改名字(spring.cloud.nacos.config.group=xxx)。名字需要和Nacos中的Group中一致。

配置内容:根据上面选择的格式,在Nacos中为服务添加相关的配置信息。相当于把原来的写在项目中的配置写在Nacos中方便管理。

这样的服务工程项目原来的基本配置(将服务注册至Nacos的相关配置)写入到bootstrap.properties中,springcloud项目启动会优先读取这个文件中的配置。

使用Nacos Config需要导入依赖:

image-20210722104104341

image-20210722104122490


查看远程配置的详细信息的方式

1.在启动类中添加获取相关属性的代码段

public static void main(String[] args) throws InterruptedException {
//配置容器
   ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
   //从application.properties中读取相关的属性
   while(true){
      //当动态配置刷新时,会更新到Environment中,因此此处每隔一秒从Environment中获取配置
      String userName = applicationContext.getEnvironment().getProperty("user.name");
      String userAge = applicationContext.getEnvironment().getProperty("user.age");
      System.out.println(userName+" : "+userAge);

      //获取当前部署的环境
      String currentEnv = applicationContext.getEnvironment().getProperty("current.env");

      //休眠一秒
      TimeUnit.SECONDS.sleep(1);
   }
}

2.在类的内部定义相关的属性获取

@RestController
public class ConfigController {
    @Value("${user.name:}")
    private String name;
    @Value("${user.age:}")
    private String age;
    
    @GetMapping("/config")
    public String config(){
        return name+":"+age;
    }
    
}

3.通过属性映射的实体类进行调用

实体类:

@Data
@Component
@ConfigurationProperties(prefix = "user")//绑定前缀为user的属性字段
public class UserEntity {
    private String name;
    private String age;
}

controller:

@Autowired
private UserEntity userEntity;

@GetMapping("/config2")
public String config2(){
    return userEntity.getName()+":"+userEntity.getAge();
}

注意:@Autowired注解必须添加,在这里UserEntity是从项目启动后就存在容器中的映射。如果需要获取配置中的详细信息,不能不加注解。不加注解为创建一个UserEntity的实例,其中所有属性为空,调用会报空指针异常错误

如果更改Nacos config 配置中心中的配置信息,无需重启改服务模块。配置中心会自动动态配置信息。

image-20210722143210326


通过yaml方式进行远程配置

首先需要在改模块的bootstrap.properties文件中添加:

spring.cloud.nacos.config.file-extension=yaml

此配置项默认使用.properties文件格式

然后在Nacos config的配置中心中添加相关的配置信息,重启该服务模块即可。


Nacos config 配置中心多环境配置

支持profile粒度的配置

image-20210722144325905

在模块项目中的bootstrap.properties文件中可以通过添加:

spring.profiles.active=develop  #激活使用哪一分配置文件,代表原来的application-dev.properties

选择远程的哪一份配置文件进行启动。

在Nacos config中进行相关配置时,Data id 需要满足格式:【name】-【环境名称】.【远程配置文件类型】(例:nacos-config-develop.properties 或 nacos-config-develop.yaml)


Nacos config 配置中心数据模型

image-20210722150201134

通过在 bootstrap.properties文件中定义:

spring.cloud.nacos.config.namespace=xxxxxxxx

通过命名空间的指定ID号,来确定使用哪个命名空间

image-20210722152458336

image-20210722150229361

通过在 bootstrap.properties文件中定义:

spring.coud.nacos.config.group=MY_GROUP

来选择远程配置环境中不同分组的环境配置

image-20210722150238647

数据模型:

image-20210722151344273

tips:远程配置格式为properties的也可以使用text格式,官方文档中未提及


Nacos数据持久化

image-20210722153859462

内嵌数据库存于./data/derby-data文件夹中,使用java编写。由于无法便捷的观察数据存储情况,我们使用mysql对它进行数据持久化操作。操作步骤为:

image-20210722160251465

mysql数据库脚本存在conf文件夹下。

image-20210722154440358

在mysql中运行nacos-mysql.sql脚本创建相关的表格。创建表格如下:

image-20210722160148871

修改conf/application.properties文件,其中:

image-20210722161532359

将这一部分的相关注释去除,并且修改用户名,密码,链接。配置数据库个数。db.num配置数据库的个数,配置多少个,就要在db.url中.多少个链接(从0作为第一个开始),本机上修改为:

image-20210722161723646

最后如果没有Nacos集群,则以单机方式启动Nacos。当日志信息中出现:

image-20210722161809895

则代表使用了用户额外的数据库数据存储,即mysql。访问本机Nacos:

​ http://localhost:8848/nacos

image-20210722162121725

image-20210722162512070

发现所有的数据都为空,开始添加新的配置,后在mysql中的nacos数据库表config-info中发现增加了刚刚添加的配置信息。至此数据持久化结束。


Nacos集群部署

高可用架构:

image-20210722165020691

3个或者3个以上的Nacos节点才可以构成集群。VIP通过Nginx和Keepalived进行实现。在本机上,复制三分干净的Nacos,也就是去除data和log的Nacos

image-20210722165517101

然后分别将三台Nacos更改至对应端口(applcation.properties中server.port=880x)

image-20210722165923435

我们这边使用本地的mysql,生产环境每个nacos对应一个数据库,数据库之间进行数据同步即可。(本地环境采用:三个Nacos都连接到本地的同一个数据库)

最后每个Nacos通过以集群的方式启动进行测试。访问Nacos的集群列表,查看结果:

image-20210722172440528

如果使用内部数据库,数据也可以同步,内部数据库含有同步算法

加入Nginx

通过官网 www.nginx.org 下载对应版本的Nginx。解压缩后,双击nginx.exe开启Nginx,访问localhost:80 查看是否启动成功。也可以通过在解压缩后的目录下的命令窗口中输入:nignx -s stop 命令关闭nginx。

有可能,80端口被占用导致Nginx启动失败

在命令窗口下输入: netstat -aon|findstr :80 查看80端口被什么占用

image-20210723095040548

然后输入:tasklist|findstr “4” 将第一行后面占用号输入查看对应进程

image-20210723095149853

然后把对应的进程删去即可。像这种情况就是被IIS服务占用,如果访问localhost:80 会出现一下界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eUqlOo71-1628737722641)(https://gitee.com/yang-codegod/pic-go/raw/master/image-20210723095315914.png)]

关闭方式如下:

image-20210723095425190

但是如果如上图被System占用,则代表被ntoskrnl.exe占用,这个进程是负责Windows核心操作部分是内核进程,不可以删去!这种情况就只能改变nginx的端口号,具体操作归并到下述配置中。

配置文件 ./conf/nignx.conf完成对于nginx的配置:

​ 修改监听端口:

image-20210723100851998

添加对于nacos集群的链接配置:

image-20210723101024683

添加对于/nacos 请求的拦截和处理(代理转发):

image-20210723101109853

访问 localhost:81 :

image-20210723100917948

启动成功!!!

tips:Nginx负载均衡配置-----upstream

image-20210723101557950

image-20210723101732365

tips: Nginx常用负载均衡策略配置

image-20210723101938381

image-20210723101954396

image-20210723102203429

hash算法结果为0或者1

image-20210723102257732

tips:Nginx负载均衡其他几个配置

image-20210723102422287

tips:Nginx静态代理

image-20210723102522354

image-20210723102659855

image-20210723102720388

tips:Nginx动静分离

image-20210723102820904

相关链接:https://www.bilibili.com/video/BV1Yb411p7wT?p=24

tips:Nginx虚拟主机

image-20210723102921208

相关链接:https://www.bilibili.com/video/BV1Yb411p7wT?p=25&spm_id_from=pageDriver

通tips回到Nacos集群,Nginx配置完毕并且成功运行之后,访问的地址就从原本的三个不同的地址转变为一个即Nginx地址加上相关链接的方式:

localhost:81/nacos

需要在springcloudalibaba的工程项目中修改对应的路径:

spring.cloud.nacos.discovery.server-addr=localhost:81

spring.cloud.nacos.config.server-addr=localhost:81


7722657)]

相关链接:https://www.bilibili.com/video/BV1Yb411p7wT?p=25&spm_id_from=pageDriver

通tips回到Nacos集群,Nginx配置完毕并且成功运行之后,访问的地址就从原本的三个不同的地址转变为一个即Nginx地址加上相关链接的方式:

localhost:81/nacos

需要在springcloudalibaba的工程项目中修改对应的路径:

spring.cloud.nacos.discovery.server-addr=localhost:81

spring.cloud.nacos.config.server-addr=localhost:81


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值