Nacos 配置
客户端
父 POM
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
项目 POM
<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-discovery</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
配置
server:
port: 4000
spring:
application:
name: nacos-provider # 服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 服务注册中心地址
management:
endpoints:
web:
exposure:
include: "*" # 暴露所有端点
服务端
启动时注意选择启动模式
下载地址:https://github.com/alibaba/nacos/releases
注册中心
这里我们启动了两个服务,分别是 power-0,power-1,配置与上述完全相同,只是微服务的名字使用相同的名称, spring.application.name=nacos-power ,这样就可以标识这两个微服务属于同一类
Nacos 判断服务是以 服务名 + IP 地址 + 端口号 来标识服务的 Eureka 是以 服务名 + 服务 ID 来标识服务的

Nacos 的负载均衡使用的是 Ribbon 来实现的,同样是使用 微服务名称 来调用
@SpringBootApplication
@EnableDiscoveryClient
public class AppNacos {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(AppNacos.class, args);
}
@RestController
public class EchoController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/echo")
public String echo() {
return "Hello Nacos Discovery";
}
@GetMapping("/call-power")
public Object callPower() {
return restTemplate.getForObject("http://nacos-power/echo", String.class);
}
}
}
配置中心
依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
配置 bootstrap.yml
spring:
application:
name: nacos-provider # 服务名称
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 服务注册中心地址
config:
server-addr: 127.0.0.1:8848 # 服务配置中心地址
file-extension: yml
prefix: nacos-client-test # 优先级高于 spring.application.name
group: DEV_GROUP # 默认为 DEFAULT_GROUP
namespace: 6b701cf8-2a20-464e-a06a-f6e71e930624
management:
endpoints:
web:
exposure:
include: "*" # 暴露所有端点
说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
在 Nacos Spring Cloud 中,dataId 的完整格式如下: ${prefix}-${spring.profiles.active}.${file-extension} 其中 prefix > spring.application.name
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类型。
集群搭建
搭建方式参考:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式
搭建步骤
1、cluster.conf
配置集群所在的地址和端口号
192.168.254.151:8848
192.168.254.152:8848
192.168.254.153:8848
2、application.properties
指定数据库连接地址(可以指定多个数据库)
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.254.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=root
3、启动
sh startup.sh
Nginx 反向代理
通过 Nginx 反向代理,我们就可以直接通过 Nginx 来访问 Nacos 了
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream nacos_server {
server 192.168.254.151:8848;
server 192.168.254.152:8848;
server 192.168.254.153:8848;
}
server {
listen 8848;
server_name localhost;
location /nacos/ {
proxy_pass http://nacos_server;
proxy_set_header Host $http_host;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
