Spring Cloud Alibaba

SpringCloud Hoxton.SR9
SpringCloud Alibaba 2.2.6.RELEAS
Nacos 1.4.2
Sentinel 1.8.1
Seata 1.3.0

1、Nacos

版本说明 · alibaba/spring-cloud-alibaba Wiki (github.com)

什么是 Nacos

Nacos 支持 AP 和 CP 模式的切换

父 POM

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.3.2.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <properties>
  8. <java.version>1.8</java.version>
  9. <spring.cloud.version>Hoxton.SR9</spring.cloud.version>
  10. <spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
  11. </properties>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-actuator</artifactId>
  16. </dependency>
  17. </dependencies>
  18. <dependencyManagement>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.cloud</groupId>
  22. <artifactId>spring-cloud-dependencies</artifactId>
  23. <version>${spring.cloud.version}</version>
  24. <type>pom</type>
  25. <scope>import</scope>
  26. </dependency>
  27. <dependency>
  28. <groupId>com.alibaba.cloud</groupId>
  29. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  30. <version>${spring.cloud.alibaba.version}</version>
  31. <type>pom</type>
  32. <scope>import</scope>
  33. </dependency>
  34. </dependencies>
  35. </dependencyManagement>

1.1 服务发现

1.1.1 服务提供者

  • POM
  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>
  • yaml
  1. server:
  2. port: 8082
  3. spring:
  4. application:
  5. name: nacos-provider
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848
  10. management:
  11. endpoints:
  12. web:
  13. exposure:
  14. exclude: '*'
  • 启动类添加 @EnableDiscoveryClient
  • Controller
  1. @RestController
  2. @RequestMapping("/test")
  3. public class TestController {
  4. @Value("${server.port}")
  5. private String port;
  6. @GetMapping("/port")
  7. public Object getPort(){
  8. return port;
  9. }
  10. }

1.1.2 消费者

  • POM
  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>
  • yaml
  1. server:
  2. port: 8181
  3. spring:
  4. application:
  5. name: nacos-consumer
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848
  10. server-url:
  11. # 服务提供者 spring.application.name
  12. nacos-provider: http://nacos-provider
  • 启动类添加 @EnableDiscoveryClient
  • 配置 RestTemplate
  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate(){
  4. return new RestTemplate();
  5. }
  • Controller
  1. @RestController
  2. @RequestMapping("/consumer")
  3. public class ConsumerController {
  4. @Autowired
  5. private RestTemplate restTemplate;
  6. @Value("${server-url.nacos-provider}")
  7. private String serverUrl;
  8. @GetMapping("/port")
  9. public Object getPort(){
  10. return restTemplate.getForObject(serverUrl+"/test/port",String.class);
  11. }
  12. }

1.2 配置中心

  • POM
  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  4. </dependency>
  • bootstrap.yml
  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: nacos-provider
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: 127.0.0.1:8848
  10. config:
  11. server-addr: 127.0.0.1:8848
  12. file-extension: yaml
  13. management:
  14. endpoints:
  15. web:
  16. exposure:
  17. exclude: '*'
  • application.yaml
  1. spring:
  2. profiles:
  3. active: dev
  • 启动类添加 @EnableDiscoveryClient
  • Controller
  1. @RestController
  2. // 动态刷新
  3. @RefreshScope
  4. @RequestMapping("/test")
  5. public class TestController {
  6. @Value("${config.info}")
  7. private String config;
  8. @GetMapping("/config")
  9. public Object getConfig(){
  10. return config;
  11. }
  12. }
  • 配置文件名称

SpringCloud Alibaba - 图1{spring.profiles.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 **spring.profiles.active** 为空时,对应的连接符 **-** 也将不存在,dataId 的拼接格式变成 **${prefix}.${file-extension}**
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

2、Sentinel

  • POM
  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.csp</groupId>
  7. <artifactId>sentinel-datasource-nacos</artifactId>
  8. </dependency>
  • yaml
  1. spring:
  2. application:
  3. name: sentinel-test
  4. cloud:
  5. sentinel:
  6. transport:
  7. dashboard: 127.0.0.1:8080