目录
Nacos简介
是什么
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心。
简单说:Nacos就是注册中心+配置中心的组合
等价于:Nacos = Eureka+Config+Bus
阿里牛逼~
能干嘛
替代Eureka做服务注册中心
替代Config做服务配置中心
去哪下
github
地址:https://github.com/alibaba/Nacos
官网文档:
https://nacos.io/zh-cn/index.html
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
各种注册中心比较
Nacos
支持AP
和CP
模式的切换:
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
安装并运行Nacos
先从官网下载Nacos:
https://github.com/alibaba/nacos/releases/tag/1.1.4
解压安装包,直接运行bin
目录下的startup.cmd
命令运行成功后直接访问:http://localhost:8848/nacos
默认账号密码都是nacos
Nacos服务注册中心功能
参考来源:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
基于Nacos的服务提供者
父pom
:
<!--spring cloud 阿里巴巴-->
<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>
当前模块pom
:
<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>
配置文件:
应用名和服务端地址都要写上,不然注册不上去
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
#暴露监控端口
management:
endpoints:
web:
exposure:
include: '*'
启动类:
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
测试
访问接口:http://localhost:9001/payment/nacos/1
nacos
控制台:
nacos
服务注册中心功能演示成功
服务提供者9001
也成功的注册到了nacos
上
为演示nacos的负载均衡,参照9001新建9002
新建cloudalibaba-provider-payment9002
,步骤同上
启动。
ok,环境准备完毕,继续往下走!
为啥nacos
支持负载均衡?
因为集成了ribbon
基于Nacos的服务消费者
新建Module
: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.atguigu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</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>
配置文件:
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
#配置要调用的微服务,服务名nacos-payment-provider
#Controller里通过@value获取
service-url:
nacos-user-service: http://nacos-payment-provider
启动类:
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
public static void main(String[] args)
{
SpringApplication.run(OrderNacosMain83.class,args);
}
}
配置类:
@Configuration
public class ApplicationContextConfig
{ //RestTemplate注入容器
@Bean
//开启负载均衡
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
业务类:
@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);
}
}
测试:启动提供者集群以及当前消费者
访问:http://localhost:83/consumer/payment/nacos/13
nacos registry, serverPort: 9002 id13
nacos registry, serverPort: 9001 id13
83访问9001/9002,轮询负载OK!
好了,nacos的注册中心功能演示完毕,顺带演示了负载均衡。
接下来看看它的另一个功能配置中心!