Nacos作为服务注册中心
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server 启动监听的ip地址和端口 |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 给当前的服务命名 |
服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 设置服务所处的分组 |
权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围 1 到 100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata | spring.cloud.nacos.discovery.metadata | 无 | 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 | spring.cloud.nacos.discovery.log-name | 无 | |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置成Nacos集群名称 |
接入点 | spring.cloud.nacos.discovery.enpoint | UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon | ribbon.nacos.enabled | true | 一般都设置成true即可 |
是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled | true | 可以设置成false来关闭 watch |
服务提供者
新建Modulecloudalibaba-provider-payment9001
pom
父模块的pom中添加依赖
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
本模块中导入spring-cloud-starter-alibaba-nacos-discovery
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency><dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
</dependencies>
yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
主启动类
创建PaymentMain9001
,使用@EnableDiscoveryClient
开启服务注册与发现
//开启服务注册与发现
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
controller
创建PaymentController
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
测试
启动Nacos Server 9001,访问http://localhost:8848/nacos/
查看服务列表
注册成功!
访问http://localhost:9001/payment/nacos/1
运行成功
为了展示nacos的负载均衡,参照9001新建9002,只有配置文件端口号不同,主启动类名不同
启动运行,查看是否注册
点击详情查看
注册成功!
访问http://localhost:9002/payment/nacos/1
程序运行成功
服务消费者
新建模块cloudalibaba-consumer-nacos-order83
pom
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.kylin</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
为什么nacos支持负载均衡?因为nocos-discovery集成了ribbon
yml
service-url.nacos-user-service
值为消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者,可以不配置)
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
主启动类
创建OrderNacosMain83
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83 {
public static void main(String[] args)
{
SpringApplication.run(OrderNacosMain83.class,args);
}
}
RestTemplate
编写RestTemplate配置类ApplicationContextBean
,开启负载均衡
@Configuration
public class ApplicationContextBean {
@Bean
//开启负载均衡
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
controller
编写OrderNacosController
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id)
{
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
测试
启动9001 9002 83 Nacos Server
访问http://localhost:8848/nacos/
查看服务列表
服务注册成功!
访问http://localhost:83/consumer/payment/nacos/13
轮询负载成功!
Nacos作为服务配置中心演示
基础配置
新建cloudalibaba-config-nacos-client3377
pom
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.kylin</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
yml
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,来取配置之后,才能保证项目的正常启动。
springboot中的配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profile.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profile.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
bootstrpa.yml
yaml不能简写为yml,nacos不支持
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
#${prefix}-${spring.profile.active}.${file-extension}
# nacos-config-client-dev.yaml
注意:当 spring.profile.active
为空时,对应的连接符 -
也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
如果没有配可能发生一些错误
application.yml
spring:
profiles:
active: dev
Nacos Server中添加nacos-config-client-dev.yaml
配置文件
config:
info: from nacos config center,nacos-config-client-dev.yaml,version=1
点击发布
主启动类
创建NacosConfigClientMain3377
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
controller
通过Spring Cloud原生注解@RefreshScope
实现配置自动更新
@RestController
//实现配置自动更新
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
测试
启动前需要在nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件,运行cloud-config-nacos-client3377的主启动类
访问http://localhost:3377/config/info
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。修改version为2
确认发布
再次访问http://localhost:3377/config/info
,更新成功!
分类配置
概念。。。
DataID方案
默认空间+默认分组+新建dev和test两个DataID,dev我们已经创建好了,创建nacos-config-client-test.yaml
。
config:
info: from nacos config center,nacos-config-client-test.yaml,version=1
通过spring.profile.active
属性就能进行多环境下配置文件的读取
此时读取的就是nacos-config-client-test.yaml
文件config.info
测试,重新启动3377,访问http://localhost:3377/config/info
Group方案
通过Group实现环境区分,新建GroupDEV_GROUP
,nacos-config-client-info.yaml
config:
info: nacos-config-client-info.yaml,DEV_GROUP
同样再次创建nacos-config-client-info.yaml
Group为TEST_GROUP
config:
info: nacos-config-client-info.yaml,TEST_GROUP
修改配置文件spring.cloud.nacos.config.group
配置group,默认为DEFAULT_GROUP
通过配置读取配置中心中的TEST_GROUP分组下的nacos-config-client-info.yaml文件
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: TEST_GROUP #指定group 默认值为DEFAULT_GROUP
#${prefix}-${spring.profile.active}.${file-extension}
# nacos-config-client-dev.yaml
applicaiton.yml
spring:
profiles:
active: info
# active: dev
# active: test
测试,重新启动3377,访问http://localhost:3377/config/info
修改group为DEV_GROUP
测试,重新启动3377,访问http://localhost:3377/config/info
成功!
Namespace方案
新建dev/test的Namespace
分别带有各自的命名空间ID
回到服务管理-服务列表查看
点击dev
新建nacos-config-client-dev.yaml
config:
info: 1e849be4-14fe-450d-8da9-8bb25413ac5f dev namespace
修改配置文件spring.cloud.nacos.config.namespace
配置命名空间ID
测试,重新启动3377,访问http://localhost:3377/config/info
Nacos持久化配置解释
Nacos默认自带的是嵌入式数据库derby,官方源代码中的pom中可以看出引入了
derby到mysql切换配置步骤
nacos-server-1.1.4\nacos\conf目录下找到sql脚本sql语句源文件
创建nacos_config
复制运行sql语句
接着nacos-server-1.1.4\nacos\conf目录下找到application.properties
添加数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=数据库密码
重新启动nacos,可以看到是个全新的空记录界面
Linux安装Nacos
下载后发送到服务器的/opt
目录,使用tar -zxvf nacos-server-1.1.4.tar.gz
解压
解压成功后得到nacos
目录复制到/mynacos
使用cp -r nacos /mynacos