1 服务拆分及远程调用
1.1 服务拆分
1.1.1 服务拆分注意事项
- 单一职责:不同微服务,不要重复开发相同业务
- 数据独立:微服务数据独立,不要访问其它微服务的数据库
- 面向服务:微服务可以将自己的业务暴露为接口,供其他微服务调用
1.1.2 案例:根据订单id查询订单功能
不同服务不同端口,使用远程调用
1.2 远程调用
1.2.1 代码实现
- 注册RestTemplate,在order-service的OrderApplication中注册并注入Spring容器
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients(clients = UserClient.class,defaultConfiguration = DefaultFeignConfiguration.class)
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
/**
* 创建RestTemplate并注入Spring容器
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 服务远程调用RestTemplate,修改order-service的OrderService的queryOrderById方法 restTemplate.getfor Object:远程调用
1.2.2 消费者与提供者
-
服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
-
服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)
-
服务调用关系:提供者与消费者角色其实是相对的,一个服务可以同时是服务提供者和服务消费者
2 Eureka注册中心
2.1 简介
服务调用出现的问题
- 服务消费者该如何获取服务提供者的地址信息
- 如果有多个服务提供者,消费者该如何选择
- 消费者如何得知服务提供者的健康状态
Eureka的作用
2.2 Eureka注册
2.2.1 搭建EurekaServer
需要创建新的微服务(模块),EureKaServer也是一个微服务,也需要配置将自己注册到注册中心
2.2.2 注册user-service、order-service
2.3 服务发现
服务消费者添加负载均衡注解
3 Ribbon负载均衡
3.1 负载均衡流程
3.2 负载均衡策略
添加@LoadBalanced注解表示由Ribbon拦截
3.2.1 负载均衡自定义rule
- 第一种方法:全局有效,order拉去任意服务都是随机的
- 第二种方法:指定拉取某个服务随机
3.2.2 饥饿加载
4 nacos注册中心
- Nacos相对于Eurka功能更多
- 安装指南:(blog.csdn.net/qq_40609490…) 默认密码账号nacos
4.1 快速入门
4.2 nacos服务分级存储模型
- 一级是服务,例如userservice
- 二级是集群,例如杭州上海
- 三级是实例,例如杭州机房的某台部署了userservice的服务器
4.2.1 服务跨集群调用问题
- 服务调用尽可能选择本地集群的服务,跨集群调用延迟高
- 本地集群不可访问,再去访问其他集群
4.2.2 代码实现配置集群
模拟多个实例:修改完后放在一个集群的启动,在修改再启动为另一个集群
4.2.3 根据集群负载均衡
- nacos默认轮询机制,不按照本地集群优先
修改user-service集群属性配置,达到下面的效果
4.2.4 根据权重负载均衡
4.3 环境隔离-namespace
5 Nacos配置管理
5.1 统一配置管理:配置更改热更新
在Nacos中添加配置信息
配置内容填写那些需要随时变化的热更新的配置信息
5.1.1 代码实现
5.2 配置自动刷新
Nacos中的配置文件变更后。微服务无需重启就可以感知
5.2.1 方式一:@RefreshScope
5.2.2 方式二:@ConfigurationProperties
5.3 多环境配置共享
5.4 多服务共享配置
5.4.1 方式一
5.4.2 方式二
5.5 Nacos集群搭建
6 http客户端Feign
6.1 介绍
6.1.1 RestTemplate方式调用存在的问题
6.1.2 Feign客户端定义和使用
6.2 自定义Feign的配置
6.2.1 配置Feign日志
6.3 Feign的性能优化
6.4 Feign的最佳实践
7 统一网关Gateway
7.1 介绍
网关功能:
- 身份认证和权限校验
- 服务路由、负载均衡
- 请求限流
网关的技术实现
- gateway
- zuul
Zuul是基于Servlet的实现,属于是阻塞式编程。而SpringCloudGateway则是基于Spring5提供的WebFlux,属于响应式编程的实现,具备更好的技能