nacos
- nacos简介
- nacos 作为服务注册中心demo
- 基于Nacos的服务提供者
- 基于Nacos的服务消费者
- nacos切换ap和cp 模式
nacos简介
- 为什么叫nacos
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
- 是什么
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心
Nacos:Dynamic Naming and Configuration Service
Nacos就是注册中心+配置中心的组合
Nacos = Eureka+Config+Bus
- 能干吗
- 注册中心- 配置中心
- 下载
https://github.com/alibaba/Nacos# 文档
https://nacos.io/zh-cn/index.htmlhttps://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
- 各种服务注册中心的对比
服务注册与发现框架 | cap模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
eureka | ap | 支持 | 2.x闭源 |
zk | cp | 不支持 | 中 |
consul | cp | 支持 | 高 |
nacos | ap或者cp切换 | 支持 | 高 |
ps: ap 为高可用, cp 为数据必须一致。
- 安装并运行nacos
1. Java + maven ok
2. https://github.com/alibaba/nacos/releases/tag/1.1.4 下载
3. 解压,startup.cmd双击
4. 访问http://localhost:8848 然后账号密码都是nacos
nacos 作为服务注册中心demo
基于Nacos的服务提供者
- pom
<!--spring cloud alibaba 2.1.0.RELEASE--><dependencyManagement><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>
</dependencyManagement><!-- 上面是父pom --><dependencies><!-- nacos --><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></dependencies>
- yaml
server:port: 9001spring:application:name: nacos-payment-providercloud:nacos:discovery:server-addr: localhost:8848 #配置Nacos地址management:endpoints:web:exposure:include: '*'
- 作为nacos的客户端
@EnableDiscoveryClient
- rest 接口省略,暴露接口地址,给消费者访问
- 按照上面的可还搭建一个服务提供者9002
基于Nacos的服务消费者
- pom 同上
- yaml
server:port: 83spring:application:name: nacos-order-consumercloud:nacos:discovery:server-addr: localhost:8848# 这里将服务消费者的地址写到了配置文件,方便更改
service-url:nacos-user-service: http://nacos-payment-provider
- 作为nacos的客户端 消费者,主启动
@EnableDiscoveryClient
- 配置restTemplate类。 并且负载均衡。
- 消费者controller
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;@RestController
@Slf4j
public class OrderNacosController
{@Resourceprivate RestTemplate restTemplate;// 读取yaml@Value("${service-url.nacos-user-service}")private String serverURL;@GetMapping(value = "/consumer/payment/nacos/{id}")public String paymentInfo(@PathVariable("id") Long id){// 服务提供者暴露的rest接口地址 /payment/nacosreturn restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);}}
- 测试
发现83调用9001,9002成功,并且支持沦陷。
nacos切换ap和cp 模式
# cp
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'# ap
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=AP'