spring-cloud-alibaba nacos

2021/5/12

学习下Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

Nacos 作为注册中心

适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。

可作为配置中心、服务注册中心
Nacos 支持将注册中心(Service Registry)与配置中心(Config Center) 在一个进程合并部署或者将2者分离部署的两种模式。

启动nacos

Nacos Spring Cloud 快速开始

Nacos REST 服务调用

服务提供者

添加依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>
        
修改配置
server:
  port: 8070
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

编写测试 controller

@RestController
public class EchoController {

	@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
	public String echo(@PathVariable String string) {
		return "Hello Nacos222 Discovery " + string;
	}
}

启动类上添加 @EnableDiscoveryClient

服务消费者

添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.2.2.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.1.4</version>
</dependency>

修改配置
server:
  port: 8071
spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类上添加 @EnableDiscoveryClient

访问 http://127.0.0.1:8071/echo/123 服务可用

Nacos Dubbo

服务提供者

添加依赖
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.10</version>
</dependency>
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>2.7.5</version>
</dependency>

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.5</version>
</dependency>
修改配置
dubbo:
  application:
    name: nacos-provider
    version: 1.0.0

  registry:
    address: nacos://127.0.0.1:8848
    version: 1.0.0

启动类上添加 @EnableDubbo

服务消费者

添加依赖

与服务提供者依赖一致

修改配置
dubbo:
  application:
    name: nacos-consumer
    version: 1.0.0

  registry:
    address: nacos://127.0.0.1:8848
    version: 1.0.0

启动类上添加 @EnableDubbo

Nacos 作为配置中心

客户端

添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>

修改配置

新建配置文件 bootstrap.yml,配置文件要与 nacos 里配置的 Data ID 一致。
nacos 控制台上添加配置

Data ID 是 nacos-config2-dev.yml,所以在 bootstrap.yml 配置文件中这么配置

Data ID 与配置文件之间的联系 ${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
  application:
    name: nacos-config2
  profiles:
    active: dev 

通过 controller 查看配置

@RestController
@RefreshScope
@RequestMapping("/config")
public class ConfigController {


	@Value("${user.name}")
	private String userName;

	@Value("${user.age}")
	private String userAge;

	@RequestMapping("/get")
	public String get() {
		return "user.name = " + userName + " user.age = " + userAge;
	}
}

http://127.0.0.1:8081/config/get

在 nacos 控制台中修改配置后,会同步刷新。

环境隔离

Nacos 文档中对命名空间的描述:

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在命名空间页面中添加不同的空间。