微服务
1、微服务课程安排
分布式及微服务框架:SpringCloud、Dubbo
分布式中间件:Rubit
微服务是一种软件架构风格,他是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。

服务拆分、远程调用、服务治理、请求路由。商品与订单之间的交互,利用远程服务调用。
身份认证,配置管理,服务保护,分布式事务(跨系统事务问题,回滚问题,原子性失败),异步通信,消息可靠性,延迟消息,分布式搜索(几百万条数据以上),倒排索引,数据聚合。

将用户信息作为10台服务器,而订单用200台服务器。
2、单体架构
单体架构
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:架构简单,部署成本低。
缺点:团队协作成本高;系统发布效率低;系统可用性差(一个tomcat来承担压力)。

分成多个tomcat来分担压力。
总结:单体架构比较简单,适合规模比较小的项目。
3、微服务简介
微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。
粒度小,团队自治,服务自治。
数据库也是分离的。

4、SpringCloud微服务框架简介
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

对于SpringBoot的版本也有要求:

上课使用的是2021
5、黑马商城项目了解
熟悉黑马商城
6、服务拆分原则
服务拆分原则
什么时候拆分?

7、拆分服务-商品微服务
拆分服务
工程结构有两种:
独立Project(非常大型,彻底独立)、Maven聚合(中大型)。
需求:

8、拆分服务-购物车微服务
拆分购物车代码,里面会需要涉及到一些商品的信息,需要关联商品表。里面的信息是空的。
9、服务远程调用
远程调用

RestTemplate实现HTTP请求
java
List<ItemDTO> items = null;
String url = "http://localhost:8081/items?ids={ids}";
ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(url, //请求地址
HttpMethod.GET, //请求方式
null, //请求参数实体,因为在路径中携带参数,因此不需要
new ParameterizedTypeReference<List<ItemDTO>>() {
}, //返回数据类型
Map.of("ids", CollUtils.join(itemIds, ",")) //将集合中的元素用","号分割
);
10、注册中心原理
服务治理
服务远程调用时存在的问题:写死不方便。
注册中心原理:


11、nacos安装
Nacos可以当注册中心,也可以是配置中心。
nacos基于数据库存储。
nacos在Docker部署。

12、服务注册
服务注册
服务注册步骤如下:

13、服务发现
服务发现
消费者需要连接nacos以拉取和订阅服务,因此服务发现的前两步和服务注册是一样的,后面再加上服务调用即可:

java
//获取注册中心中item-service的服务列表
List<ServiceInstance> instanceList = discoveryClient.getInstances("item.service");
//从上面随机选择一个服务实例
ServiceInstance serviceInstance = instanceList.get(RandomUtil.randomInt(instanceList.size()));
//可以从实例中获取微服务的访问地址
String url = serviceInstance+"/items?ids={ids}";
现在还是通过HTTP访问,一个一个的访问。要是可以把全部的类和方法共享出去。就可以相当于在一个项目里进行调用。
14、Feign快速入门
SOA 面向服务的架构---->分布式系统 ----->粒度更细,职责更单一;微服务
微服务更加偏向于功能职责的拆分,分布式更加偏向于服务器,物理机,地域的分布。
OpenFeign


快速入门
OpenFeign已经被SpringCloud自动装配,实现起来。

15、Feign-配置连接池
连接池
OpenFeign对Http请求做了优雅的伪装,不过其底层发起http请求,依赖于其它的框架。这些框架可以自己选择,包括以下三种:
- HttpURLConnection:默认实现,不支持连接池
- Apache HttpClient:支持连接池
- OKHttp:支持连接池
具体源码可以参考FeignBlockingLoadBalancerClient类中的delegate成员变量。
OpenFeign整合OKHttp的步骤如下:
引入依赖:
XML
<!-- OK http 的依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
</dependency>
开启连接池功能

16、Feign-抽取客户端最佳实践
最佳实践-抽取hm-api

实现步骤:



最佳实践抽取:将微服务需要的客户端抽取出来,每个模板调用抽取出的客户端。
17、Feign-日志级别配置
日志


