Nacos服务
安装Nacos
启动
startup.cmd -m standalone 地址localhost:8848/nacos nacos nacos 账号密码
依赖
Eureka依赖注释掉 不然会冲突
父工程
<!-- 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文集
去掉注解
注解掉eureka配置 cloud属于spring下 配置nacos地址,订单和用户服务 配置一样
启动成功
Nacos服务分级存储模型
一级是服务 userservice
二级是集群 郑州 上海
三级是实例 机房
根据服务名选择较近的集群,在负载均衡到机房
yml文件配置
负载均衡配置
NacosRule规则 首选当前服务所在集群,在集群中随机选一个实例
如果集群中不存在任何实例,就会跨集群寻找可以访问的地址,并会报 警告warn
实例的权重配置
Nacos控制台可以设置实例的权重值 0-1 0就是不访问
权重值越高 被访问的概率就越高
更新服务的时候,把部分实例权重为0 然后更新完改回来 ,这样服务就不会停
Nacos环境隔离
namespace用来做环境隔离,每个namespace都有唯一的id,不通空间下的服务不可见
创建命名空间
可以将服务条件到对应的命名空间下,需要修改yml
不同命名空间下的服务彼此不能访问,会报异常
小总结
Nacos和Eureka的区别
nacos心跳检测 提供者和消费者
提供者实例 分为临时和非临时 非临时是服务主动推送到注册中心.注册中心推送给消费者,临时实例挂了会剔除,非临时会等待恢复
消费者实例 从注册中心拉去可调用的实例对象
Nacos配置
通用的.需要常变动的一些配置,可以配置到nacos的配置中心. 命名 服务名称+环境.yaml
加载配置的流程
nacos注册中心地址 配置目前在applicatin.yml里面,所以没办法先读取nacos配置信息
boot提供了bootstrap.yml 会在application.yml前加载
配置
引入依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
新建bootstrap.yml
将nacos的需要的配置放到这里面,applicaiton,yml 没用的配置删除掉
配置中心的dataId 需要 服务名+环境+后缀 还需要地址是nacos地址
spring: application: name: orderservice #服务名 profiles: active: dev #环境 cloud: nacos: server-addr: localhost:8848 #nacos地址 config: file-extension: yaml #文件后缀名
配置完以后 启动orderservice,获取配置中心设置的时间格式化模板
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now() {
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
访问该接口
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));
}
}
方式二 设置成配置类,就不需要在Controller上加@RefresjScope了,自动刷新
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;
}
小总结
多环境配置共享
配置原理
启动的时候 加载配置文件
相同属性的配置优先级
nacos集群
解压nacos ,先配置一份
有两个文件一个是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
在conf下修改nginx.config
在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 默认轮询
集群的配置是通用的 一个配置了 所有的都会配置
小总结