Nacos概念
1、
Nacos
的缩写 (Dynamic Naming Configueration Service),Na
为naming/nameServer
即注册中心,co
为configuration
即配置中心,service
是指该注册/配置中心
都是以服务为核心。
2、Nacos 是什么?
【Nacos = Eureka + Config +Bus
】:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 就是注册中心
+配置中心
的组合。
3、Nacos 能干嘛?
(1)替代 Eureka 做服务注册中心
。
(2)替代 Config 做服务配置中心
。
Nacos的安装运行、集群部署和持久化配置
Nacos 安装、集群部署和持久化配置:https://blog.csdn.net/qq_36763419/article/details/121179174
Nacos 服务注册中心
基于 Nacos 的服务提供者
一、新建 cloud-alibaba-nacos-provider-payment9001
模块
1、引入 pom 依赖
(1)父工程 pom 依赖
<!--SpringCloud Alibaba 依赖-->
<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>
(2)本模块 pom 依赖
<!--Nacos 服务注册与发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2、写 yml 配置文件
server:
port: 9001
spring:
application:
name: nacos-discovery-payment-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
3、主启动
@SpringBootApplication
//此处开启的注解是:@EnableDiscoveryClient
@EnableDiscoveryClient
public class NacosDiscoveryProviderPaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryProviderPaymentMain9001.class, args);
}
}
4、业务类
@RestController
@Slf4j
public class PaymentController {
@Value(value = "${server.port}")
private String serverPort;
@GetMapping(value = "/provider/nacos/discovery/{string}")
public String echo(@PathVariable String string) {
return "Nacos provider " + serverPort + " : Hello " + string;
}
}
5、测试验证:启动nacos server控制台:http://localhost:8848/nacos,启动服务提供者,可以在 Nacos 的服务管理 》服务列表中 看到服务提供者的服务名称:
二 、同理参考 9001
新建负载均衡:cloud-alibaba-nacos-provider-payment9002
,
1、也可以通过虚拟映射,如下图所示:
基于 Nacos 的服务提供者
1、新建cloud-alibaba-nacos-discovery-consumer-order80
模块
2、引入 pom 依赖
<!--Nacos 服务注册与发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、写 yml 配置文件
server:
port: 80
spring:
application:
name: nacos-discovery-payment-order
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
4、主启动
@SpringBootApplication
//此处开启的注解是:@EnableDiscoveryClient
@EnableDiscoveryClient
public class NacosDiscoveryConsumerOrderMain80 {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerOrderMain80.class, args);
}
}
5、配置类
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
6、controller
@RestController
@Slf4j
public class PaymentController {
private String INVOKE_URI = "http://nacos-discovery-payment-provider";
@Resource
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/nacos/discovery/{string}")
public String echo(@PathVariable String string) {
return restTemplate.getForObject(INVOKE_URI + "/provider/nacos/discovery/" + string, String.class);
}
}
测试:
消费者访问服务提供者负载均衡正常。因为 Nacos 的依赖包中集成了 Netflix Ribbon。
服务注册中心对比
一、Nacos 与其他注册中心特性对比图
二、Nacos 支持 AP 和 CP 模式的切换
1、C 是所有节点在同一时间看到的数据是一致的;而 A 的定义是所有的请求都会收到响应。
2、何时选择使用 AP 或 CP 模式?
(1)一般来说,如果不需要存储服务级别的信息且服务实例是通过
nacos-client
注册,并能够保持心跳上报,那么选择AP
模式。当前主流的服务如:SpringCloud 和 Dubbo 服务
,都适合用于 AP 模式,AP 模式为了服务的可能性而减弱一致性,因此 AP 模式下只支持注册临时实例
。
(2)如果需要在服务级别编辑或者存储配置信息,那么CP
是必须,K8S 服务和 DNS 服务
都是用于 CP 模式。CP 模式则支持注册持久换实例,此时是以 Raft 协议为集群运行模式。该模式下注册实例之前必须先注册服务,如果服务不存在,则返回错误。
(3)模式切换:curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'