安装
启动nacos
在nacos/bin目录中,输入命令启动Nacos:
sh startup.sh -m standalone
注册中心
使用nacos注册中心
1.在父工程里面添加spring-cloud-alibaba的管理依赖
<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>
2. 注释掉order-service 和 user-service中原有的eureka依赖
3.添加nacos的客户端依赖:
<!-- nacos客户端依赖包-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.修改user-service&order-service中的application.yml文件,注释掉eureka地址,添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos 服务端地址
5.启动并测试
集群配置
配置服务所在的集群位置
1.配置yml,集群名称
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称 杭州
2.配置yml,负载均衡
NacosRule负载均衡策略
优先选择同集群服务实例列表
本地集群找不到提供者,才去其他集群寻找,并且会报警
确定了可用实力列表后,再采用随机负载均衡挑选实例
userservice: #要做配置的微服务名称
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
权重配置
可以直接在nacos控制台里面找到实例编辑
通过配置权重,可以在线关闭服务,可以平滑升级
隔离环境
1通过namespace配置命名空间的方式做环境隔离
2.每个namespace都有唯一id
3.不同namespace下的服务不可见
在服务的yml里面配置命名空间
spring:
cloud:
nacos:
discovery:
namespace: edebec8d-2ae2-4fa0-9490-4db7b808872a #dev环境 命名空间的id
nacos注册中心和eureka的区别
nacos会把实例区分为临时实例和非临时实例
服务提供者:
临时实例如果挂了,会被nacos剔除。(干儿子)
非临时实例挂了不会被踢出。(亲儿子)
服务消费者:
nacos会主动推送消息给消费者,服务列表缓存
配置临时实例和非临时实例 (对服务器压力比较大)
spring:
cloud:
nacos:
discovery:
ephemeral: false #是否 是临时实例
统一配置管理
将配置交给nacos管理的步骤
1.在nacos中添加配置
dataid : 服务名称-环境.yaml
需要热更新的配置放到这里
2.进入nacos的配置管理客户端依赖:
<!--nacos的配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3.在微服务中添加bootstrap.yml文件
配置nacos地址、当前环境、服务名称、文件后缀名
spring:
application:
name: userservice #服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
config:
file-extension: yaml #文件后缀名
4.通过@value注解可以读取到配置
@value("${pattern.dateformat}")
配置热更新
方式一:在@value注入的变量所在类上添加注解@RefreshScope
方式二:使用@ConfigurationProperties注解
写一个配置类
package cn.itcast.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
private String envSharedValue;
}
直接注入这个类就可以使用:
@Autowired
private PatternProperties properties;
@GetMapping("prop")
public PatternProperties properties(){
return properties;
}
多环境配置
在nacos控制台里面添加新的配置,dataid格式是:
微服务名称.yaml
例如:userservice.yaml 中间就不写环境了(userservice-dev.yaml)
这样所有环境下,都会加载uservice.yaml的配置,从而实现多环境配置
注意,配置文件优先级顺序:
(远端配置 服务名+环境)服务名-profile.yaml > (远端配置 服务名)服务名.yaml > 本地配置