SpringCloud
1.微服务架构
1.1. 客户端与服务端
- 消费者:只负责提交订单,涉及到的数据封装为DTO
- 提供者:只负责处理订单,涉及到的数据封装为DO
整体数据流为:VO -> DTO -> DO -> PO
1.2.工程重构
- 拆分工程,将公共代码抽取出来,形成独立模块(api-commons)
- 将公共模块作为依赖引入到其他模块中
1.3. 服务拆分
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安装
- 下载地址:github.com/alibaba/nac…
- 启动命令:startup.cmd -m standalone
3.3. 服务注册与发现
- 在服务提供者以及消费者中引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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三元组
- Namespace:用于区分部署环境,默认为public,可以实现开发、测试、生产环境隔离。
- Group:用于区分服务或应用,默认为DEFAULT_GROUP,可以划分不同的微服务组
- DataId:配置文件名称,默认为{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