1、nacos 下载启动配置
1.1nacos下载
可以选择稳定版本下载 例如当前的1.4.1 这里根据系统选择,下载编译后的nacos
解压后进入bin目录
1.2启动nacos
startup.cmd启动文件,由于当前单机版启动 需要修改模式为单机 set MODE="standalone"
或者使用启动命令startup.cmd -m standalone
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
启动成功界面
访问地址 本机地址:8848/nacos/index.html
账号密码 nacos nacos
1.3配置nacos
nacos是有内嵌数据库的 由于不好维护 可以配置为mysql
修改配置文件
nacos->conf->application.properties 打开注释
新建库 nacos
然后导入sql
user表
重新启动nacos
登录后可以修改密码
修改用户名可以不用nacos 下次登录时可以用新的名字登录
2、Nacos配置中心
2.1 版本说明
版本说明连接 alibaba 其实是个实现 spring 是个规范
2.2 Hello World入门
新建maven父工程
然后加入依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<springboot.version>2.3.2.RELEASE</springboot.version>
<springcloudalibaba.version>2.2.5.RELEASE</springcloudalibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${springcloudalibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
新建子模块 nacos-config-test
并引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
新建 application.yml 新建启动类 NacosConfigApplication
server:
port: 8080
servlet:
context-path: /
bootstrap启动优先级比application高 新建bootstrap.properties配置文件。
新建nacosconfig 配置管理->配置列表->右侧+号
写入bootstrap.properties配置
spring.application.name=nacos.config.test
spring.cloud.nacos.server-addr=127.0.0.1:8848
#默认组
spring.cloud.nacos.config.group=DEFAULT_GROUP
#data id nacos_config.properties
spring.cloud.nacos.config.name=nacos_config.properties
新建NacosConfigController 测试读取远程配置的参数 访问路径是否可以读参数
@Value("${java.name}")
private String name;
@Value("${java.age}")
private String age;
@GetMapping("/getConfigInfo")
public String getConfigInfo(){
return name+age;
}
修改nacos配置参数
例如age=20
访问接口返回参数是否更新 如果没更新在类上面加 @RefreshScope
nacos也是个不错的配置中心 而且远程配置优先级大于本地配置文件参数优先级可以新建组 dataId相同不影响
然后修改bootstrap.properties 配置文件
重启访问地址 参数更新为新的组
2.3配置model
配置列表默认空间为public
可以新增空间 然后在空间新建配置
然后修改bootstrap配置
新增 id是粘空间id 然后修改组group、config 对应的名字
spring.cloud.nacos.config.namespace=0bc5b655-e3d3-4e65-8fce-8685ac245eb6
在进行测试读取配置;
这就是nacos配置数据模型
Nacos 多配置集
有很多配置都是重复的比如 redis mysql等 假如有十个就需要配置十次吗?
可以进行分开配置使用例如 在dev下面创建多个配置 有mysql reids oa crm
bootstrap.properties 修改配置读取 记得修改命名空间
#namespace dev 默认public命名空间
spring.cloud.nacos.config.namespace=0bc5b655-e3d3-4e65-8fce-8685ac245eb6
spring.cloud.nacos.config.extension-configs[0].data-id=mysql_common.properties
spring.cloud.nacos.config.extension-configs[0].group=DEFAULT_GROUP
#该参数表示是否开启自动更新
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=redis_config.properties
spring.cloud.nacos.config.extension-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=crm.properties
spring.cloud.nacos.config.extension-configs[2].group=CRM_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
spring.cloud.nacos.config.extension-configs[3].data-id=oa.properties
spring.cloud.nacos.config.extension-configs[3].group=OA_GROUP
spring.cloud.nacos.config.extension-configs[3].refresh=true
测试
@GetMapping("/getCommonInfo")
public String getCommonInfo(){
return redis+"::"+mysql+"::"+crm+"::"+oa;
}
配置中心_其它配置
配置导出
配置导入
直接克隆配置到其它空降
历史版本
监听查询
服务注册与发现
服务注册
配置文件
server:
port: 8081
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服务注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
启动类加@EnableDiscoveryClient注解 启用 Discovery
启动后检查
服务调用 openfeign
stock 模块添加 StockController 添加方法 @RestController @RequestMapping路径 新增 test 方法
@RestController
@RequestMapping("/stock")
public class StockController {
@RequestMapping("/test")
public String test(String info){
return "库存模块接收到信息"+info;
}
}
然后 在order 进行导入 openfeign 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
新建包feign 添加接口 StockFeignServic 添加方法调用 注意服务注册的名字 nacos-stock
@FeignClient("nacos-stock")
public interface StockFeignService {
@RequestMapping("/stock/test")
public String test(@RequestParam("info") String info);
}
创建OrderController
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private StockFeignService stockFeignService;
@RequestMapping("/test")
public String test(){
return stockFeignService.test("库存减减减");
}
}
启动类添加注解 @EnableFeignClients(basePackages = “com.java.feign”) 扫描指定包
依次启动stock order 访问 order test方法地址 调用成功
多实例负载
模拟多个节点
点击 Edit Configurations…
复制启动console
修改端口
-Dserver.port=8084
新增代码
stock 同理操作 然后将其四个service启动 查看nacos 服务列表
访问时发现轮询
查询服务被订阅情况
服务领域模型
nacos涉及了很多地方这上面也没有写完
可以发现nacos服务列表也是有命名空间的
模块里可以这样配置新增 namespace cluster-name
spring:
application:
name: nacos-order
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 0bc5b655-e3d3-4e65-8fce-8685ac245eb6
cluster-name: JAVA
Nacos集群 高可用
每个技术都有高可用,高可用就是其中一个服务挂了可以 继续使用。由于会把nacos 用为配置中心 和注册中心比较重要,也需要高可用 。
一般最少需要三个节点,三个以上太奢侈,两个设计选举问题。所以这里使用三个。
实现 1、修改启动监本
2、准备三份nacos 端口为 8848、8849、8850
3、重命名cluster.conf.example为cluster.conf并修改地址和ip
4、修改程序连接地址和命名空间
5、启动程序测试
1、修改启动脚本
修改startup里面的启动模式为set MODE="cluster"
2、修改conf配置文件application.properties
3、将集群文件重命名为cluster.conf
编辑
4、然后将nacos文件复制三份 并修改conf下的application.properties的port别三个文件的端口为 8850、8849、8848
5、程序里面配置
原来的nacos-config-test 模块修改bootstrap.properties
6、测试
启动三个nacos 并访问其中一个端口地址查看情况 启动应用
访问地址
然后关掉一个测试没有问题 ,关掉两个也没有问题