https://github.com/alibaba/nacos/releases
1.2 部署解压后启动:
sh bin/startup.sh -m standalone
-m standalone
表示单机启动。
部署后访问localhost:8848/nacos
可访问nacos控制台,然后以nacos/nacos(用户名/密码)登录。
停止nacos-server使用如下命令:
sh bin/shutdown.sh
1.3 数据持久化
nacos-sever默认使用的是derby数据库来保存数据的,derby是一个基于内存的数据库,所以在服务重新启动后,derby中保存的数据就会丢失。
在Nacos控制台命名空间菜单项中新建一个命名空间。然后重新启动,会发现新建的命名空间不见了。
- 本地数据库
准备本地数据库,在数据库中执行nacos-server中./conf/nacos-mysql.sql
,准备表数据。
- 配置Mysql连接信息
修改nacos-server 项目中的./conf/application.properties
数据库相关配置:
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
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=1234
- 重启server
> sh ./bin/shutdown.sh
The nacosServer(52861) is running...
Send shutdown request to nacosServer(52861) OK
> ./bin/startup.sh -m standalone
在Nacos控制台命名空间菜单项中新建一个命名空间。然后重新启动,会发现新建的命名空间还在,说明持久化配置成功。
1.4 集群配置- 环境准备
将nacos-server复制出来3个,修改这3个nacos-server中conf/application.properties
中的端口号及数据库配置。这三个nacos-server的端口分别为8848,8849,8850。
- 集群配置
分别将naocs-server下的cluster.conf.example复制为cluster.conf,并在末尾修改或添加如下配置:
192.168.0.125:8848
192.168.0.125:8849
192.168.0.125:8850
- 启动
分别在三个nacos-server下执行下面的命令启动:
sh bin/startup.sh
三个nacos-server启动后,访问127.0.0.1:8848/nacos, 127.0.0.1:8849/nacos, 127.0.0.1:8850/nacos可以访问对应的nacos-server。
在nacos-server控制台的集群管理->节点列表中可以看到三个server服务节点。
1.2 nacos-client 2.1 注册中心 准备在Nacos控制台中命名空间菜单添加一个一个新的命名空间Test(命名空间ID项要为Test,与后面演示一致)。
父工程依赖pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<artifactId>spring-boot-starter-parentartifactId>
<groupId>org.springframework.bootgroupId>
<version>2.6.3version>
parent>
<groupId>org.examplegroupId>
<artifactId>nacosartifactId>
<version>1.0-SNAPSHOTversion>
<modules>
<module>nacos-client01module>
modules>
<packaging>pompackaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>2021.0.1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2021.0.1.0version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
project>
本工程
pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>nacosartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>nacos-client01artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
启动类
NacosClientApp.java
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClientApp {
public static void main(String[] args) {
SpringApplication.run(NacosClientApp.class, args);
}
}
配置
bootstrap.yml
server:
port: 9000
spring:
application:
name: nacos-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: Test # 默认为Public
group: TEST_GROUP # 默认为DEFAULT_GROUP
以上信息配置完成后,启动项目,观察nacos控制台服务管理->服务列表->Test中有当前服务。
服务名 | 分组名称 | 集群数目 | 实例数 | 健康实例数 | 触发保护阈值 | *** 作 |
---|---|---|---|---|---|---|
nacos-client | TEST_GROUP | 1 | 1 | 1 | false | 详情\示例代码\订阅者\ 删除 |
NacosProviderController.java
@RestController
@RequestMapping("/provider")
public class NacosProviderController {
@Value("${server.port}")
private Integer port;
@GetMapping("/port")
public Integer port() {
return port;
}
@GetMapping("/info")
public String info() {
return "Nacos provider info";
}
}
重启服务,使接口生效。
2.2 服务消费添加新的服务,作为消费方消费上面nacos-client提供的服务。
添加依赖pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>nacosartifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>nacos-consumer01artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
配置
bootstrap.yml
server:
port: 9010
spring:
application:
name: nacos-client-consumer01
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: Test
group: TEST_GROUP
启动类
NacosConsumerApp.java
@SpringBootApplication
@EnableDiscoveryClient
// 开启Feign支持
@EnableFeignClients
public class NacosConsumerApp {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApp.class, args);
}
}
Feign Client
NacosProviderClient.java
@FeignClient("nacos-client")
public interface NacosProviderClient {
@GetMapping("/provider/port")
Integer port();
@GetMapping("/provider/info")
String info();
}
请求接口
NacosConsumerController.java
@RestController
@RequestMapping("/consumer")
public class NacosConsumerController {
@Resource
private NacosProviderClient nacosProviderClient;
@GetMapping("/provider/port")
public Integer providerPort() {
return nacosProviderClient.port();
}
@GetMapping("/provider/info")
public String providerInfo() {
return nacosProviderClient.info();
}
}
启动项目访问接口,可正常访问到nacos-client服务。
2.2 配置中心注册中心采用父工程+子模块的方式演示,为了能理清晰的知道导入的依赖的作用,该项目为单模块项目演示。
添加依赖pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<artifactId>spring-boot-starter-parentartifactId>
<groupId>org.springframework.bootgroupId>
<version>2.6.3version>
<relativePath/>
parent>
<groupId>org.examplegroupId>
<artifactId>nacos-config-clientartifactId>
<version>1.0-SNAPSHOTversion>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>2021.0.1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2021.0.1.0version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
启动类
NacosConfigClientApp.java
@SpringBootApplication
public class NacosConfigClientApp {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientApp.class, args);
}
}
配置
bootstrap.yml
基本配置
server:
port: 9003
spring:
profiles:
active: dev
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
# 命名空间
namespace: Test
# 分组
group: TEST_GROUP
# 文件后缀
file-extension: yml
对于以上配置,需要在Nacos控制台对应的namespace下新建一个配置文件,文件分组要为TEST_GROUP。
配置文件命名组成:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
进入Nacos控制台在Test命名空间下添加配置。 Data Id: nacos-config-client-dev.yml Group: TEST_GROUP 配置格式: yaml 配置内容:
server:
port: 10003
配置好后启动项目。 控制台可以看到类似如下日志输出:
Ignore the empty nacos configuration and get it based on dataId[nacos-config-client] & group[TEST_GROUP]
Ignore the empty nacos configuration and get it based on dataId[nacos-config-client.yml] & group[TEST_GROUP]
.......
listening config: dataId=nacos-config-client-dev.yml, group=TEST_GROUP
listening config: dataId=nacos-config-client.yml, group=TEST_GROUP
listening config: dataId=nacos-config-client, group=TEST_GROUP
项目最终在10003端口(Nacos中配置)启动。
如果项目启动不是10003端口,而是本地配置文件中的端口,检查Nacos中的配置文件是否配置正确,如命名空间、分组配置。
配置动态刷新- 添加配置 修改Nacos中配置文件中的配置,并发布:
server:
port: 10003
info: Nacos config test
- 读取配置 编写AutoRefreshController.java读取配置:
@RefreshScope // 刷新配置
@RestController
@RequestMapping("/config")
public class AutoRefreshController {
@Value("${info}")
private String info;
@GetMapping("/info")
public String configInfo() {
return info;
}
}
启动项目,访问/config/info
,可以看到接口返回配置文件中配置的内容。更改Nacos中的配置,再次访问接口查看响应数据也跟着发生变化。
@RefreshScope
- 配置文件
通过extension-configs
添加多个配置文件:
server:
port: 9003
spring:
profiles:
active: dev
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: Test
group: TEST_GROUP
file-extension: yml
# 添加扩展配置
extension-configs:
- dataId: datasource.yml
group: DATASOURCE_GROUP
# 是否自动刷新
refresh: true
- dataId: redis.yml
group: CACHE_GROUP
refresh: false
- Nacos控制台添加配置
Data Id: datasource.yml
Group: DATASOURCE_GROUP
内容:
datasource:
platform: mysql
Data Id: redis.yml
Group: CACHE_GROUP
内容:
redis:
host: 127.0.0.1
- 新增接口访问配置
@RefreshScope
@RestController
@RequestMapping("/config")
public class ConfigController {
@Value("${datasource.platform}")
private String datasourcePlatform;
@Value("${redis.host}")
private String redisHost;
@GetMapping("/datasource/platform")
public String datasourcePlatform() {
return datasourcePlatform;
}
@GetMapping("/redis/host")
public String redisHost() {
return redisHost;
}
}
启动项目,访问新增的两个接口,接口将响应新增的配置文件中对应的内容。(如果项目启动报错@Value加载不到配置,需要检查配置文件是否正确)。
- 测试动态刷新
确保接口开启了自动刷新,@RefreshScope
。由于配置文件datasource.yml开启了refresh,而redis.yml没有开启refresh,所以在nacos修改redis.yml的内容时,接口无法动态获取并刷新。
pom.xml
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.3version>
<relativePath/>
parent>
<modelVersion>4.0.0modelVersion>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
<artifactId>nacos-client-clusterartifactId>
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>2021.0.1version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2021.0.1.0version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-bootstrapartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
project>
启动类
NacosClientClusterApp.java
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClientClusterApp {
public static void main(String[] args) {
SpringApplication.run(NacosClientClusterApp.class, args);
}
}
配置
bootstrap.yml
server:
port: 9004
spring:
application:
name: nacos-client-cluster
cloud:
nacos:
server-addr: 192.168.0.125:8848,192.168.0.125:8849,192.168.0.125:8850
discovery:
namespace: Test
group: TEST_GROUP
config:
namespace: Test
group: TEST_GROUP
file-extension: yml
Nacos-server中添加配置文件
Data ID: nacos-client-cluster.yml
Group: TEST_GROUP
配置格式: YAML
配置内容:
info: nacos client cluster info
添加接口
ClientInfoController.java
@RestController
public class ClientInfoController {
@Value("${info}")
private String info;
@Value("${server.port}")
private Integer port;
@GetMapping("/info")
public String info() {
return info;
}
@GetMapping("/port")
public Integer port() {
return port;
}
}
打成可执行jar包
要把项目打包成一个可执行jar包,在pom.xml添加如下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
在项目根目录执行:
mvn package
执行完成后在 **项目根目录/target/**会生成nacos-client-cluster-1.0-SNAPSHOT.jar。
运行jar执行下面命令运行jar包,使用多个服务构成集群
java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9004
java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9005
java -jar nacos-client-cluster-1.0-SNAPSHOT.jar --server.port=9006
分别启动项目后,在nacos控制台服务管理->服务列表能看到服务nacos-client-cluster有三个实例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)