Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合,包含开发分布式应用微服务的必需组件。
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的 动态服务发现、配置管理和服务及元数据管理平台。
简而言之,Nacos就是 注册中心和配置中心。
Nacos的作用 = Spring Cloud Eureka(注册中心) + Spring Cloud Config(配置中心)
-
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
-
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现
可以从 最新稳定版本 下载 nacos-server-$version.zip
包
启动nacos服务
启动命令,在nacos/bin 目录下执行 (standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
访问:http://localhost:8848/nacos
用户名密码:nacos/nacos
服务的发布和调用
首先创建两个工程:nacos-provider、nacos-consumer 都继承springboot工程。
ProviderController代码如下:
@RestController
public class ProviderController {
@Value("${myName}")
private String name;
@GetMapping("hello")
public String hello(){
return "hello " + name;
}
}
myName: nacos
server:
port: 18070
生产者注册到nacos
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<!-- SpringCloud的依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
</dependencyManagement>
在 application.yml 中配置nacos服务地址和应用名
myName: nacos
server:
port: 18070
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
通过Spring Cloud原生注解 @EnableDiscoveryClient
开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
效果: