4. Nacos注册中心

134 阅读3分钟

Nacos服务

安装Nacos

启动

startup.cmd -m standalone 地址localhost:8848/nacos nacos nacos 账号密码

image.png

依赖

Eureka依赖注释掉 不然会冲突

image.png

父工程 
<!-- nacos依赖 --> 
<dependency>
    <groupId>com.alibaba.cloud</groupId> 
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency> 

客户端:
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

修改yml文集

去掉注解

image.png

注解掉eureka配置 cloud属于spring下 配置nacos地址,订单和用户服务 配置一样

image.png 启动成功

image.png

Nacos服务分级存储模型

一级是服务 userservice

二级是集群 郑州 上海

三级是实例 机房

根据服务名选择较近的集群,在负载均衡到机房

yml文件配置

image.png

image.png

负载均衡配置

NacosRule规则 首选当前服务所在集群,在集群中随机选一个实例

如果集群中不存在任何实例,就会跨集群寻找可以访问的地址,并会报 警告warn

image.png

实例的权重配置

Nacos控制台可以设置实例的权重值 0-1 0就是不访问

权重值越高 被访问的概率就越高

更新服务的时候,把部分实例权重为0 然后更新完改回来 ,这样服务就不会停

image.png

Nacos环境隔离

namespace用来做环境隔离,每个namespace都有唯一的id,不通空间下的服务不可见

image.png

创建命名空间

image.png

可以将服务条件到对应的命名空间下,需要修改yml

image.png

image.png 不同命名空间下的服务彼此不能访问,会报异常

image.png 小总结

image.png

Nacos和Eureka的区别

image.png nacos心跳检测 提供者和消费者

提供者实例 分为临时和非临时 非临时是服务主动推送到注册中心.注册中心推送给消费者,临时实例挂了会剔除,非临时会等待恢复

消费者实例 从注册中心拉去可调用的实例对象

image.png

Nacos配置

通用的.需要常变动的一些配置,可以配置到nacos的配置中心. 命名 服务名称+环境.yaml

image.png

image.png 加载配置的流程

image.png

nacos注册中心地址 配置目前在applicatin.yml里面,所以没办法先读取nacos配置信息

boot提供了bootstrap.yml 会在application.yml前加载

image.png 配置

image.png

引入依赖

<!--nacos配置管理依赖-->
<dependency> 
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> 
</dependency>

新建bootstrap.yml

image.png

将nacos的需要的配置放到这里面,applicaiton,yml 没用的配置删除掉

配置中心的dataId 需要 服务名+环境+后缀 还需要地址是nacos地址

image.png

spring: application: name: orderservice #服务名 profiles: active: dev #环境 cloud: nacos: server-addr: localhost:8848 #nacos地址 config: file-extension: yaml #文件后缀名

配置完以后 启动orderservice,获取配置中心设置的时间格式化模板

image.png

@Value("${pattern.dateformat}") 
private String dateformat;
@GetMapping("now") 
public String now() { 
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); 
}

访问该接口

image.png

nacos自动配置(热更新)

yml属性加载分两种方式

一种是@value(#{xxx}) private String xxx: 配置给某类下的属性

@Slf4j 
@RestController
@RequestMapping("/user") 
@RefreshScope //自动刷新配置
public class UserController { 
    @Autowired 
    private UserService userService; 
    
    @Value("${pattern.dateformat}") 
    private String dateformat; 
    
    @GetMapping("now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}

image.png 方式二 设置成配置类,就不需要在Controller上加@RefresjScope了,自动刷新

image.png

package cn.itcast.order.config; 
import lombok.Data; 
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data 
@Component 
@ConfigurationProperties(prefix = "pattern")
public class PatternConfig {
    private String dateformat;
}

image.png

小总结

image.png 多环境配置共享

配置原理

image.png

image.png 启动的时候 加载配置文件

image.png

相同属性的配置优先级

image.png

nacos集群

解压nacos ,先配置一份

image.png

image.png 有两个文件一个是application.peoperties.example

另一个是cluster.conf.example

需要删除example在配置

//appliation port每个不同nacos 都要修改 
server.port=8845

spring.datasource.platform=mysql

db.num=1 

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root 
db.password.0=root

在修改cluster

//cluster 集群环境 通用 
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

解压nginx

image.png

在conf下修改nginx.config image.png 在http 节点下 配置映射

upstream nacos-cluster { 
    server 127.0.0.1:8845; server 127.0.0.1:8846; server 127.0.0.1:8847; 
} 

server { 
    listen 80; 
    server_name localhost; 
    
    location /nacos { 
        proxy_pass http://nacos-cluster;
    } 
}

启动,关闭脚本

点击nginx.exe运行 
退出
nginx -s quit

然后输入localhost/nacos 会自动跳转一个nacos 默认轮询

集群的配置是通用的 一个配置了 所有的都会配置

image.png 小总结

image.png