目录
Nacos注册中心
下载
启动
快速入门
1.在父工程中添加spring-cloud-alilbaba的管理依赖子模块添加nacos的客户端依赖
2.子模块添加nacos的客户端依赖
3.子模块配置文件
4.启动
Nacos服务分级存储模型
集群配置
nacos的负载均衡
Nacos环境隔离
新建命名空间
Nacos配置管理
1.在nacos中添加配置文件
2.从微服务拉取配置
配置热更新
1.方式一
2.方式二
配置共享
1.添加一个共享的配置
2.运行两个服务,会有不同的结果
搭建Nacos集群
1.复制三份nacos,更改他们的配置文件
2.然后修改application.properties文件,添加数据库配置
3.修改conf/nginx.conf文件
Nacos注册中心
下载
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
更改端口:
启动
cd到nacos\bin目录下,执行 startup.cmd -m standalone
Nacos 默认账号密码都是nacos
快速入门
1.在父工程中添加spring-cloud-alilbaba的管理依赖子模块添加nacos的客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2.子模块添加nacos的客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3.子模块配置文件
此时要注释掉Eureka注册中心的配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/order-service?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
4.启动
去nacos的服务页查看
Nacos服务分级存储模型
集群配置
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
nacos的负载均衡
修改配置文件,加入负载均衡的配置信息
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
NacosRule负载均衡策略
1.优先选择统同集群服务实例列表
2.本地集群找不到提供者,才会去其它集群寻找,并且会警告
3.确定了实例列表后,再采用随机负载均衡挑选实例
Nacos环境隔离
Nacos提供了namespace来实现环境隔离功能。
- nacos中可以有多个namespace
- namespace下可以有group、service等
- 不同namespace之间相互隔离,例如不同namespace的服务互相不可见
新建命名空间
修改配置文件,添加namespaces信息
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
Nacos配置管理
1.在nacos中添加配置文件
2.从微服务拉取配置
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。
但如果尚未读取application.yml,又如何得知nacos地址呢?
因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:
引入依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
添加bootstrap.yaml
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
添加逻辑读取配置
配置热更新
我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是**配置热更新**。
要实现配置热更新,可以使用两种方式:
1.方式一
在@Value注入的变量所在类上添加注解@RefreshScope:
2.方式二
使用@ConfigurationProperties注解代替@Value注解。
在user-service服务中,添加一个类,读取patterrn.dateformat属性:
package com.tledu.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
在UserController中使用这个类代替@Value:
import com.tledu.user.config.PatternProperties;
import com.tledu.user.pojo.User;
import com.tledu.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
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 java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private PatternProperties patternProperties;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
}
}
配置共享
1.添加一个共享的配置
2.运行两个服务,会有不同的结果
搭建Nacos集群
1.复制三份nacos,更改他们的配置文件
2.然后修改application.properties文件,添加数据库配置
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=123
再分别修改他们的端口
3.修改conf/nginx.conf文件
下载nginx并解压
配置如下:
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;
}
}