Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案,此项目包含开发分布式应用微服务的必需组件,方便开发通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。
Nacos
Nacos是服务注册和配置中心,一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。Nacos=Eureka + Config + Bus。
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
安装并运行Nacos
1,本地java 8+Maven环境已经OK。
2,下载Nacos
3,解压安装包,直接运行bin目录下的startup.cmd。
4,测试,直接访问http://localhost:8848/nacos,账号和密码都是nacos。
Nacos服务注册中心

服务提供者注册
1,新建项目
2,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> </dependency> </dependencies>
3,YML文件
server:
port: 9001
spring:
application:
name: nacos-provider-service
cloud:
nacos:
discovery:
server-addr: http://localhost:8848/
management:
endpoints:
web:
exposure:
include: "*"
3,启动类
@SpringBootApplication @EnableDiscoveryClient public class NacosPayment9001Main { public static void main(String[] args) { SpringApplication.run(NacosPayment9001Main.class,args); } }
4,业务类
@RestController public class NacosController { @Value("${server.port}") private String serverPort; @GetMapping("/nacos/{id}") public String getServerPort(@PathVariable("id") Integer id){ return "nacos port:"+serverPort+"\t id:"+id; } }
其他服务提供者配置与该提供者配置类似。
服务消费者注册
1,新建项目
2,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> </dependency> </dependencies>
3,YML文件
server:
port: 9003
spring:
application:
name: nacos-order-service
cloud:
nacos:
discovery:
server-addr: http://localhost:8848/
management:
endpoints:
web:
exposure:
include: "*"
#自定义的值用于获取提供者服务
service-url:
nacos-user-service: http://nacos-provider-service
4,主启动类
@SpringBootApplication @EnableDiscoveryClient public class NacosOrder9003Main { public static void main(String[] args) { SpringApplication.run(NacosOrder9003Main.class,args); } }
5,业务类
@Configuration public class MyConfig { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
@RestController public class OrderController { @Autowired private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serviceUrl; @GetMapping("/consumer/nacos/{id}") public String getServicePort(@PathVariable("id") Integer id){ String result=restTemplate.getForObject(serviceUrl + "/nacos/" + id, String.class); return "consumer invoke "+result; } }
Nacos默认是AP模式,它支持AP和CP模式的切换。
Nacos服务配置中心
在Nacos Spring Cloud中,DataId的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix项来配置。
- spring.profiles.active即为当前环境对应的profile,当spring.profiles.active为空时,对应的连接符-也将不存在,dataId的拼接格式变成${prefix}.${file-extension}。
- file-extension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前支持properties和yaml类型。

配置模块搭建
1,新建项目
2,POM文件
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</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> </dependency> </dependencies>
3,YML文件
bootstrap.yml
server:
port: 9004
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos注册中心地址
config:
server-addr: localhost:8848 #nacos配置中心地址
file-extension: yaml #指定yaml格式的配置
application.yml
spring:
profiles:
active: dev #表示开发环境
4,主启动类
@SpringBootApplication @EnableDiscoveryClient public class NacosConfig9004Main { public static void main(String[] args) { SpringApplication.run(NacosConfig9004Main.class,args); } }
5,业务类
@RestController @RefreshScope //支持Nacos动态刷新功能 public class ConfigController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo(){ return configInfo; } }
6,测试
根据Nacos dataId的命名规则,在Nacos管理系统中设置配置信息。

通过访问http://localhost:9004/config/info,可以查看到信息。在配置列表中更改信息后,再次访问还是可以查看到信息。
通过Spring Cloud 原生注解@RefreshScope 实现配置自动更新。
Nacos配置管理模型
对于Nacos配置管理,通过Namespace、Group、DataID能够定位到一个配置集。

- 配置集(Data ID):在系统中,以配置文件通常就是一个配置集,一个配置集可以包含了系统各种配置信息。
- 配置项:配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域。
- 配置组(Group):配置分组是对配置集进行分组,通过一个有意义的字符串(如Buy和Trade)来表示,不同的配置分组下可以有相同的配置集(Data ID),若没有填写配置分组,默认就是DEFAULT_GROUP。配置分组的常见场景:可用于区分不同的项目或应用。
- 命名空间(Namespace):命名空间(namespace)可用于进行不同环境的配置隔离。如:开发环境、测试环境和生产环境。不同的命名空间下,可以存在相同名称的配置分组(Group)或配置集。默认为public。
Namespace:代表不同环境,如开发、测试、生产环境。
Group:代表某项目。如XX医疗项目、XX电商项目。
DataId:每个项目往往有若干工程,每个配置集(DataId)是一个工程的主配置文件。

获取配置集需要指定:
1,nacos服务器地址,必须指定。
2,namespace,如不指定默认public。
3,group,如不指定默认DEFAULT_GROUP
4,dataId,必须指定。
posted on
浙公网安备 33010602011771号