1、Nacos简介
1)、为什么叫Nacos
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service
2)、是什么
- 一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心
- Nacos:Dynamic Naming and Configuration Service
- Nacos就是注册中心+配置中心的组合
- Nacos = Eureka+Config+Bus
3)、能干嘛
- 替代Eureka做服务注册中心
- 替代Config做服务配置中心
4)、去哪下
官网文档:
Spring Cloud Alibaba Reference Documentation
5)、各种注册中心比较
2、安装并运行Nacos
1)、本地Java8+Maven环境已经OK
2)、先从官网下载Nacos
Release 1.1.4(Oct 24th, 2019) · alibaba/nacos · GitHub
3)、解压安装包,直接运行bin目录下的startup.cmd
4)、命令运行成功后直接访问http://localhost:8848/nacos
5)、默认账号密码都是nacos
6)、结果页面
3、Nacos作为服务注册中心演示
1)、基于Nacos的服务提供者
- 新建Module:cloudalibaba-provider-payment9001
- 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>
< 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>
- YML
server :
port : 9001
spring :
application :
name : nacos-payment-provider
cloud :
nacos :
discovery :
server-addr : localhost:8848 # 配置 Nacos 地址
management :
endpoints :
web :
exposure :
include : '*'
- 主启动
package com.abc.springcloud.alibaba ;
import org.springframework.boot.SpringApplication ;
import org.springframework.boot.autoconfigure. SpringBootApplication ;
import org.springframework.cloud.client.discovery. EnableDiscoveryClient ;
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main ( String [] args ) {
SpringApplication . run ( PaymentMain9001 . class , args );
}
}
- 业务类
package com.abc.springcloud.alibaba.controller ;
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 ;
@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 ;
}
}
- 测试
http://lcoalhost:9001/payment/nacos/1
nacos控制台
nacos服务注册中心+服务提供者9001都ok了
2)、基于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.abc.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 >
为什么nacos支持负载均衡:
- YML
server :
port : 83
spring :
application :
name : nacos-order-consumer
cloud :
nacos :
discovery :
server-addr : localhost:8848
service-url :
nacos-user-service : http://nacos-payment-provider
- 主启动
package com.abc.springcloud.alibaba ;
import org.springframework.boot.SpringApplication ;
import org.springframework.boot.autoconfigure. SpringBootApplication ;
import org.springframework.cloud.client.discovery. EnableDiscoveryClient ;
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
public static void main ( String [] args )
{
SpringApplication . run ( OrderNacosMain83 . class , args );
}
}
- 业务类
ApplicationContextBean
package com . abc . springcloud . alibaba . config ;
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 ApplicationContextConfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate ()
{
return new RestTemplate ();
}
}
OrderNacosController
package com.abc.springcloud.alibaba.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
{
@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 );
}
}
测试
localhost:83/consumer/payment/nacos/13
83访问9001/9002,轮询负载OK
4)、服务注册中心对比
Nacos全景图所示