SpringCloud学习笔记(一)

SpringCloud

1.微服务架构

1.1. 客户端与服务端

  • 消费者:只负责提交订单,涉及到的数据封装为DTO
  • 提供者:只负责处理订单,涉及到的数据封装为DO

整体数据流为:VO -> DTO -> DO -> PO

1.2.工程重构

  • 拆分工程,将公共代码抽取出来,形成独立模块(api-commons)
  • 将公共模块作为依赖引入到其他模块中

1.3. 服务拆分

SpringCloud学习笔记(一)_第1张图片

2.LoadBalancer

2.1. 简介

  • 提供客户端的软件负载均衡算法和服务调用,将请求分发到不同的服务实例上,实现系统的HA(高可用)
  • SpringCloud中提供了两种负载均衡算法:轮询、随机
  • SpringCloud中提供了两种负载均衡组件:Ribbon(替代使用Spring Cloud Loadbalancer、OpenFeign

2.2.客户端负载 VS 服务器端负载均衡

  • Nginx是服务器负载均衡,客户端所有请求都移交给nginx,然后由nginx实现转发
  • loadbalancer是客户端负载均衡,在调用微服务接口时,会在注册中心获取注册信息服务列表缓存在JVM本地,从而实现在本地实现RPC远程服务调用技术

2.3. Spring Cloud Loadbalancer

  • 在SpringCloud中,实现负载均衡,只需要在RestTemplate的配置类中添加@LoadBalanced注解即可
@Configuration
public class ApplicationContextConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

3.Nacos

3.1. 简介

  • Nacos是SpringCloudAlibaba提供的服务注册与发现组件
  • Nacos=Na+Config+Service
  • Nacos支持AP和CP两种模式
  • Nacos支持K8S、Docker、SpringCloud

3.2. Nacos安装

  • 下载地址:https://github.com/alibaba/nacos/releases
  • 启动命令:startup.cmd -m standalone

3.3. 服务注册与发现

  • 在服务提供者以及消费者中引入依赖
<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
  • 在服务提供者以及消费者中配置Nacos地址
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  • 在服务提供者以及消费者中添加@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}

访问:http://localhost:8848/nacos/index.html,可以在服务列表中看到对应的服务

3.4. 配置中心

通过Nacos和spring-cloud-starter-alibaba-nacos-config实现中心化全局配置的动态变更,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。

springboot中配置文件的加载存在优先级顺序,bootstrap优先级高于application。

业务类示例代码:

@RestController
@RefreshScope #实现配置自动更新
public class NacosConfigClientController {
    @Value("${config.info}") #从配置中心获取配置
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

bootstrap.yml配置文件示例代码:

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml

# nacos端配置文件DataId的命名规则:
# ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是nacos-config-client-dev.yaml

application.yml配置文件示例代码:

server:
  port: 3377
spring:
  profiles:
    active: dev

3.5. Namespace-Grroup-DataId三元组

SpringCloud学习笔记(一)_第2张图片

  • Namespace:用于区分部署环境,默认为public,可以实现开发、测试、生产环境隔离。
  • Group:用于区分服务或应用,默认为DEFAULT_GROUP,可以划分不同的微服务组
  • DataId:配置文件名称,默认为${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  • Service就是微服务,一个Service可以包含多个Cluster(集群),一个Cluster可以包含多个实例(Instance),Cluster是对指定微服务的一个虚拟划分。

bootstrap.yml配置文件示例代码:

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: PROD_GROUP
        namespace: Prod_NameSpace #Namespace的ID

你可能感兴趣的:(spring,cloud,学习,笔记)