为什么叫NacosNacos是什么东西nacos的快速开始
下载nacos 使用nacos完成简单的服务注册
父pom配置cloud Alibaba相关子pom导入服务注册相关依赖编写启动类,并配置服务注册注解编写配置文件,指向nacos如果想配置负载,可以按照以下步骤快速完成
复制dashboard的payment运行配置如下图所示参数即可运行9002号负载 测试结果 基于nacos完成复杂请求
配置步骤
基于上述步骤,完成消费者编写
创建消费者模块添加pom配置yml使其注册至nacos编写服务调用类和启动类测试结果 nacos同时支持cp和apnacos作为配置中心的配置
配置说明配置步骤
新建测试模块导入相关依赖编写bootstrap和application两个yml编写启动类编写业务类配置nacos相关服务配置测试修改配置后直接刷新查看配置是否直接生效 nacos基于dataid的多环境配置示例
简要说明配置步骤
新建配置修改boot的yaml文件测试 nacos基于group的分组配置方案
配置步骤(基于上述代码继续演示)
bootstrap配置对应的groupapplication配置对应的spring.profiles.active重启服务测试修改group后再次请求 nacos基于命名空间的配置
nacos新建命名空间找到命名空间完成对应数据配置测试请求
为什么叫Nacos前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
Nacos是什么东西Nacos就是注册中心 + 配置中心的组合
nacos的快速开始 下载nacos笔者这里下载的是1.1.4,地址如下
https://github.com/alibaba/nacos/releases/tag/1.1.4
下载完成解压后,运行bin下的start文件,具体是sh还是bat取决于你的操作系统,由于笔者在Windows运行,所以采用bat文件
运行完成后输入如下地址即可
http://192.168.180.1:8848/nacos/index.html
如果看到这个页面,则说明安装成功了,账号密码默认都是nacos
使用nacos完成简单的服务注册 父pom配置cloud Alibaba相关子pom导入服务注册相关依赖com.alibaba.cloud spring-cloud-alibaba-dependencies2.1.0.RELEASE pom import
编写启动类,并配置服务注册注解com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoveryorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
@SpringBootApplication
//EnableDiscoveryClient能够让注册中心能够发现,扫描到改服务。
@EnableDiscoveryClient
public class NacosProviderDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderDemoApplication.class, args);
}
@RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
编写配置文件,指向nacos
server.port=8081 #服务名称 spring.application.name=payment-provider #nacos地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 management.endpoints.web.exposure.include=*如果想配置负载,可以按照以下步骤快速完成 复制dashboard的payment运行 配置如下图所示参数即可运行9002号负载
-Dserver.port=9002测试结果
可以看到服务列表出现了两个服务
基于nacos完成复杂请求 配置步骤 基于上述步骤,完成消费者编写 创建消费者模块 添加pom配置yml使其注册至nacoscom.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoverycom.zsy.springcloud cloud-api-commins${project.version} org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
nacos-user-service: http://payment-provider
编写服务调用类和启动类
如下图所示,我们需要使用yml中配置的nacos服务消费地址,并且使用restTemplate进行远程调用
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationContextBean {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
@RestController
public class OrderNacosController {
@Value("${service-url.nacos-user-service}")
private String invokeUrl;
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/echo/{string}")
public String loadBalanceTest(@PathVariable("string") String string) {
return restTemplate.getForObject(invokeUrl + "/echo/" + string, String.class);
}
}
测试结果
可以看到调用了不同的负载了
nacos同时支持cp和apCAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
- 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):保证每个请求不管成功或者失败都有响应。分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。
相比与其他服务注册中心nacos强大就在于同时支持cp和ap
nacos作为配置中心的配置 配置说明 配置步骤 新建测试模块 导入相关依赖编写bootstrap和application两个ymlcom.alibaba.cloud spring-cloud-starter-alibaba-nacos-configcom.alibaba.cloud spring-cloud-starter-alibaba-nacos-discoveryorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
这里需要注意一下,spring boot配置加载顺序是bootstrap->application,所以我们主配置配在bootstrap,次配置配在applicaion
通过官方文档我们知道nacos加载配置文件的格式是
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
所以我们的bootstrap.yml配置如下,主配置声明了spring.application.name以及spring.cloud.nacos.config.file-extension
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
然后次配置编写了
spring:
profiles:
active: dev # 表示开发环境
编写启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
编写业务类
@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController {
@Value("${config.info}")
private String cofigInfo;
@GetMapping("/config")
public String getCofigInfo() {
return cofigInfo;
}
}
配置nacos相关服务配置
如下图所示,根据上文格式翻译得到我们的data id,然后进行自己所需数据config.info的配置
测试 修改配置后直接刷新查看配置是否直接生效如下图所示,完成直接发布就生效了
上述config info可能是测试环境的配置,假如我们生产环节也有这样一套配置,我们也没有办法完成优雅的切换呢?
配置步骤 新建配置 修改boot的yaml文件 测试 nacos基于group的分组配置方案 配置步骤(基于上述代码继续演示) bootstrap配置对应的group application配置对应的spring.profiles.active 重启服务测试 修改group后再次请求
可以看到笔者完成了spring.application.name为 nacos-config-client,且分组为default_group,active为test的配置
测试请求


