SpringCloud基本使用--nacos

70 阅读4分钟

主要依赖

  • SpringCloud:

    • gateway :Api网关,它可以提供一种简单而有效的方法路由到api。可以用来做身份验证,监考,负载均衡等。
    • openfeign: 通过接口的形式提供服务间的调用。
  • SpringcloudAlibaba

    • nacos: 服务注册与发现,配置中心
    • sentinel: Sentinel 是面向分布式服务架构的流量控制组件。
    • seata: 分布式事务组件

整体架构

image-20220825174354855

解释:

  • cloud-consumer-payment服务到了 10001 和 10002接口,cloud-gateway(api网关)路由到cloud-consumer-payment服务会有负载均衡的效果(轮询)
  • cloud-consumer-payment 通过openfeign调用cloud-provider-payment服务(同样有负载均衡的效果)。
  • 所有服务都会注册进nacos
  • cloud-consumer-payment服务开启了sentinel,seata。

基本使用

如何使用nacos服务注册与发现

由于微服务应用种服务注册与发现是核心,所以先讲nacos服务注册与发现

前置条件

依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置

spring:
  application:
  //[1]
    name: cloud-provider-payment
  cloud:
    // [0]
    nacos:
      discovery:
        server-addr: localhost:8848
  • [0]处 配置nacos地址
  • [1]处 应用名字必须写

开启注解

...
// 开启服务发现
@EnableDiscoveryClient
...
public class ProviderMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderMain9001.class, args);
    }
}

实践

完成如下步骤即可

效果

image-20220825174423230

  • 点击0处来到服务列表页面
  • 点击1处 切换到public 命名空间(命名空间后续会说)。因为配置种我们没有配置命名空间和分组所以默认命名空间为public 分组为DEFAULR_GROUP
  • 2处为刚刚注册进来得服务

总结

  • 服务注册时微服务应用的核心,后续等组件都需要和它联动
  • 利用命名空间和分组可以有效区分服务达到开发,测试分离的目的(后续配置中心会详细说明)。
  • 默认命名空间为public 默认分组为DEFAULR_GROUP

如何使用nacos配置中心

前置条件

依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

开启注解

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
// 服务发现
@EnableDiscoveryClient
// 因为整合了mybatis,不整合可以不写
@MapperScan(basePackages = {"com.celi.springcloud.mapper"})
public class ProviderMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderMain9001.class, args);
    }
}

实践

配置bootstrap.yml

因为配置中心的本质是从nacos的服务端拉取配置文件,所以这一切必须要在服务运行起来之前进行。

bootstrap.yml就是在程序引导时执行,应用于更加早期配置信息读取。有点类似于计算机启动过程中引导程序,所以取名bootstrap就很见名知意。


spring:
  application:
    name: cloud-provider-payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      //[0]
      config:
        group: DEFAULT_GROUP
        namespace: ce08d54a-a515-4ae2-a055-3f5321732cd0
        server-addr: localhost:8848
        file-extension: yaml
  • [0]config: 这里开始配置中心的配置

    • group: 所属组,这里使用得默认组。
    • namespace: 命名空间。用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
    • server-addr: nacos地址
    • file-extension: 配置文件格式

解释:

  • namespace:以包钢为例,新建一个namespace为bg,再新建一个namespace为nj(南京)。用这个来区分现场和公司的环境配置。
  • group: 我们在bgnj的命名空间下可以分别新建DEV_GROUP,PRD_GROUP用于区分开发和生产环境
  • dataId: 这个我先看application.yml的配置

配置apllication.yml

spring:
  profiles:
    active: dev

application.yml 中active对应得值就是dataId。我们联系nacos来进行解释。

新建namespace

image-20220825175916079

  1. 点击0处出来到命名空间页面
  2. 点击1新建命名空间
  3. 2处填写命名空间信息,其中命名空间id会自动生成。
  4. 填写完成确定后,3处多了一条数据,其中命名空间id则为,上述namespace得值

新建配置

image-20220825175925752

  1. 点击0配置管理,切换到我我们刚刚新建得1DEV命名空间
  2. 点击2处出加号来到如下界面。

image-20220825175935514

  1. 0出得配置规则如下:

    {service-name}-{dataid}.{ file-extension} 其中data id就是上面我们再application.yml里面配置得active值。利用这里也可以区分开分和测试配置。

    当然这里还有许多其他得格式,我这里使用了这一种而已。具体可以参照nacos官方,建议固定一种格式。

  2. 接着就可以再配置内容里面写配置了。

效果

image-20220825175950412

假设我们在配置中心加入一些配置然后点击发布:

image-20220825180003515

然后通过如下接口,确认是否配置已同步到服务中:

@Value("${config.info}")
private String info;
​
@GetMapping("getInfo")
public  String getInfo(){
    return info;
}

测试接口

image-20220825180016316

总结

  • 利用配置中心我们实现不停机更改配置,比如换数据库等
  • 利用namespace,group,dataId我们可以有效区分区域,开发环境等不同