下载安装
官网:https://nacos.io/zh-cn/
进入官网后,找到文档,找到生态融合,找到spring cloud。就看文档开整就可以了。
从github的release中下载压缩包。
安装JDK8
安装maven
1
| unzip nacos-server-2.2.3.zip
|
配置简单权限认证(鉴权,nacos自带的鉴权)
如果需要其他的鉴权,可以查看文档。
修改conf/application.properties
1 2 3 4
| nacos.core.auth.enabled=true nacos.core.auth.plugin.nacos.token.secret.key=自己设置的加密BASE64串最好32位 nacos.core.auth.server.identity.key=example nacos.core.auth.server.identity.value=example
|
启动服务
1 2 3
| cd nacos/bin sh startup.sh -m standalone cat ../logs/start.out
|
访问:http://192.168.80.3:8848/nacos
默认用户名密码:nacos nacos
关闭服务
版本对应
因为使用的是spring boot spring cloud spring cloud alibaba 还有nacos,版本之间会有差异,所以要版本对应。
一般spring cloud 与 spring boot 对应关系在spring cloud的页面。https://spring.io/projects/spring-cloud
然后是spring cloud alibaba与 spring cloud 与spring boot 与 nacos,这个在
https://github.com/alibaba/spring-cloud-alibaba
中,更详情的在WIKI的版本说明链接中
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
配置中心使用
版本选择
nacos上面使用的是2.2.3版本,根据上面版本对应所以spring cloud alibaba选用2022.0.0.0,spring cloud 使用2022.0.0, spring boot 使用3.0.2。
spring boot 使用jdk17。
helloworld
使用idea创建maven项目或者spring init项目。项目名为nacos-config。
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>nacos-config</artifactId> <version>0.0.1-SNAPSHOT</version> <name>nacos-config</name> <description>nacos-config</description>
<properties> <spring-boot.version>3.0.2</spring-boot.version> <spring-cloud.version>2022.0.0</spring-cloud.version>
<maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> </properties>
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
<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> <version>2022.0.0.0</version> </dependency>
</dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.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>
</project>
|
bootstrap.properties
1 2 3 4
| spring.cloud.nacos.config.server-addr=192.168.80.3:8848 spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos spring.application.name=example
|
必须使用bootstrap配置文件,因为spring-cloud-starter-alibaba-nacos-config使用的spring boot starter方式整合进来的,根据以前文章的源码分析,可以找到相关源码。这里用猜想分析下,bootstrap配置是启动时的配置文件,application配置文件是应用的配置文件,要先加载nacos配置之后,获取到nacos服务器的地址及相关获取时要的信息后,才能去nacos服务器获取其他配置的配置。
启动类:
1 2 3 4 5 6 7 8 9 10 11
| import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication public class NacosConfigApplication {
public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); }
}
|
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
@RestController @RequestMapping("/config") @RefreshScope public class ConfigController {
@Value("${useLocalCache:false}") private boolean useLocalCache;
@RequestMapping("/get") public boolean get() { return useLocalCache; } }
|
在nacos控制台中”配置管理”->配置列表->创建配置->
dataId写spring.application.name 如 example
group 使用默认的
配置格式选哪个都行,我选的properties
在配置内容中写 useLocalCache=true
在 Nacos Spring Cloud 中,dataId 的完整格式如下
1
| ${prefix}-${spring.profiles.active}.${file-extension}
|
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。
注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
测试:
访问:http://localhost:8080/config/get 返回ture
在nacos控制台修改useLocalCache=false再访问返回false。
更多文档
官网的例子很少,还是看spring cloud alibaba nacos config的文档吧。
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
注册中心使用
pom.xml添加依赖
1 2 3 4 5
| <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2022.0.0.0</version> </dependency>
|
服务提供者
bootstrap配置文件 或者application配置文件
1 2 3 4 5
| spring.application.name=example
spring.cloud.nacos.config.server-addr=192.168.80.3:8848 spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos
|
spring.application.name作为服务提供者的服务名。
在NacosConfigApplication启动类中添加@EnableDiscoveryClient注解
1 2 3 4 5 6 7 8 9
| @SpringBootApplication @EnableDiscoveryClient public class NacosConfigApplication {
public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); }
}
|
服务消费者
pom.xml添加依赖
1 2 3 4
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
|
配置文件
1 2 3 4 5 6 7 8 9 10
| server.port=8888 spring.application.name=service-consumer
spring.cloud.nacos.config.server-addr=192.168.80.3:8848 spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.discovery.server-addr=192.168.80.3:8848 spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=nacos
|
启动类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @SpringBootApplication @EnableDiscoveryClient public class NacosConfigApplication {
@LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); }
public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); }
}
|
测试类
1 2 3 4 5 6 7 8 9 10 11
| @RestController public class TestController {
@Autowired private RestTemplate restTemplate;
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return restTemplate.getForObject("http://example/config/get", String.class); } }
|
访问nacos控制台,服务管理->服务列表
出现example和service-consumer两个服务。
访问http://localhost:8888/echo/aaaa 连接,可以返回true或者false。
使用openfeign调用
pom.xml
1 2 3 4 5 6 7 8 9
| <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
|
openfeign同样需要loadbalancer包。
在启动类添加@EnableFeignClients注解
添加feign接口
1 2 3 4 5 6 7 8 9 10
| import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "example") public interface ExampleConfigFeign {
@RequestMapping("/config/get") boolean get();
}
|
测试类:
1 2 3 4 5 6 7 8 9 10 11
| @RestController public class TestController {
@Autowired private ExampleConfigFeign exampleConfigFeign;
@RequestMapping(value = "/echo2/{str}", method = RequestMethod.GET) public String echo2(@PathVariable String str) { return exampleConfigFeign.get() + ""; } }
|
同样测试。