Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos=Eureka+config+bus
Naco是服务注册中心和服务配置中心
JDK1.8+(包括1.8)
下面的项目是 SpringBoot2.2.2 + springcloud-alibaba 2.1.0
在https://github.com/alibaba/nacos/tags (https://github.com/alibaba/nacos/releases/tag/1.1.4)上选择版本然后下载nacos-server-1.1.4.zip
解压后进入nacos-server-1.1.4 acosin 目录下 启动nacos-server
启动成功后访问http://localhost:8848/nacos 如下图所示,账号密码都为 nacos
在https://github.com/alibaba/nacos/tags (https://github.com/alibaba/nacos/releases/tag/1.1.4)上选择版本然后下载nacos-server-1.1.4.tar.gz
解压压缩包
tar -zxvf nacos-server-1.1.4.tar.gz
在解压后的bin 目录下运作 startup.sh ,并且添加单机版参数
./startup.sh -m standalone
如果不添加参数 -m standalone,如下面代码所示
./startup.sh
系统会启动会遇到异常,所以运行成功后你可以查看一下 日志/logs/start.out
此标题下 修改 startup.sh脚本 亲测可用, 后面的启动集群测试没有通过,勿看
通过修改startup.sh脚本,使其能配置端口,从而在一台服务器上开多个Nacos节点,然后在通过nginx进行代理转发。
左图是修改前,右图是修改后
下面中上图是修改前,下图是修改后
测试nacos启动脚本是否正确,指定端口为3344的单机版nacos
./startup.sh -p 3344 -m standalone
后面的启动集群测试没有通过,勿看,勿看,勿看
在startup.sh无误的情况下
在解压后的conf目录下的cluster.conf.example 复制一份并且重命名 为cluster.conf
修改cluster.conf,添加3台机器的IP和Nacos端口
启动三个节点进行测试
./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
如果启动多个默认的Nacos节点,那么节点可能存在不一致的情况,因为每一个Nacos节点是使用内嵌的derby数据库。为了解决这个问题,Nacos采用集中式存储的方式来支持集群化部署,目前只支持mysql(原来自己存自己的,现在大家用一个数据库保持一致性)
在解压后的 conf下有一个nacos-mysql.sql 数据库文件
在MySQL创建名称为nacos_config的数据库并执行此文件
修改conf下的application.properties,添加下面的配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
在解压后的bin 目录下运作 startup.sh ,(如果是单机版添加单机版参数)
代码下载https://github.com/cbeann/share/tree/master/springcloud-Nacos-demo
在springboot+web的基础之上进行如下操作
添加依赖
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
修改yml文件
server:
port: 8001
spring:
application:
name: provider
cloud:
###nocos注册中心
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
修改主启动类
@EnableDiscoveryClient
添加一个controller
@RestController
public class HelloController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/provider/get/{id}")
public String getPayment(@PathVariable("id") Integer id) {
return "nacos registry, serverPort: " + serverPort + " id" + id;
}
}
测试本服务
http://localhost:8001/provider/get/1
可以正常请求并且Nacos注册中心有此服务
代码下载https://github.com/cbeann/share/tree/master/springcloud-Nacos-demo
在springboot+web的基础之上进行如下操作
添加依赖
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
修改yml文件
server:
port: 80
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
修改主启动类
@EnableDiscoveryClient
添加一个controller
@RestController
public class HelloController {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
@Autowired
private RestTemplate restTemplate;
//请求的服务名称
private String serverURL = "http://provider";
@GetMapping("/consumer/get/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverURL + "/provider/get/" + id, String.class);
}
}
测试本服务
http://localhost/consumer/get/1
可以正常请求并且Nacos注册中心有此服务
在springboot+web的基础之上进行如下操作
添加依赖
<!-- nacos config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
修改bootstrap.yml文件(☆☆☆☆☆)
注意:下面的配置中 file-extension的值yaml
server:
port: 3377
spring:
application:
name: config-nacos-client
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos服务配置中心地址
file-extension: yaml #指定yml格式的配置
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# config-nacos-clientt-dev.yaml
修改启动类
@EnableDiscoveryClient
添加业务逻辑controller
其中注解@RefreshScope很重要
@RestController
@RefreshScope//支持Nacos的动态刷新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
在Nacos可视化界面中添加配置
其中命名规则为bootstrap.yml中值得拼接
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# config-nacos-clientt-dev.yaml
测试http://localhost:3377/config/info