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 2021-01-09 16:59  会飞的金鱼  阅读(458)  评论(0)    收藏  举报