目录
9. 微服务
9.1 概念
9.2 Spring Cloud
9.3 Spring Cloud和Spring Boot的关系:
9.4 Spring Cloud特点
9.5 Spring Cloud 核心组件:
9.6 微服务测试
10. 小结
【写在前面】
前文链接:Java入门(八):SpringBoot, SpringBoot DB, Spring MVC
(1)微服务英文名称Microservice,微服务架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却也可以独立地进行扩展。
(2)微服务简化了开发,它将创建复杂系统的任务切分为数十乃至上百个小服务,这些小服务易于被小型的软件工程师团队所理解和修改。但是微服务并未真正地消除复杂性,而是将复杂性迁移到对大量服务的连接、管理和监控上。
(1)什么是Spring Cloud?
是基于SpringBoot的一整套实现微服务的框架。
(2)Spring Cloud的作用?
它提供了微服务开发所需的多个组件:
配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话、集群状态管理等组件
(3)官网 https://spring.io/projects/spring-cloud/
(1)Spring Boot是Spring的一套快速配置脚手架,可基于Spring Boot快速开发单个微服务;
(2)Spring Cloud是基于Spring Boot实现的;
(3)Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架;
(4)Spring Boot使用了约束优于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置 , Spring Cloud很大的一部分是基于Spring Boot来实现,Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。
(5)SpringBoot在SpringClound中起到了承上启下的作用,如果要学习SpringCloud必须要先学习SpringBoot。
(1)分布式/版本化配置
(2)服务注册和发现
(3)路由
(4)service - to - service调用
(5)负载均衡
(6)断路器
(7)分布式消息传递
(1)微服务测试的本质是接口测试
(2)重点:微服务架构下,既需要保障各服务内部每个模块的完整性,又需要关注模块间、服务间的交互。
(3)难点:
1)关联性:微服务通常情况下会与多个微服务进行交互。当某服务发生变化时,会直接影响到依赖的其他服务。
2)可靠性:为了尽可能降低微服务间通信对网络情况的高度依赖,降低因网络不稳定引起的故障率,设计微服务架构时会设计隔离机制。
3)数据一致性:微服务是基于分布式系统设计的,需要考虑分布式系统数据一致性的问题。
(1)如果自动化扫描
(2)springboot工程的目录结构与spring是一致的,但是springboot的配置文件推荐使用yaml 。
(3)@RestController:修饰的类,是专门处理url的。
(4)springboot内置了tomcat 容器。默认端口8080,保证程序能够沟通web的形式启动。
(5)一个类定义为@RestController,那么一个url进来以后,就会映射到该类上,对传入的url与该类已经定义好的url进行匹配!
(6)springboot 的代码,我们通过mvn build命令,生成的jar包,是可以直接拿来运行的,
运行命令:java -jar 你的代码
(7)springboot 最简单也是最有效的应用
前端处理逻辑,需要看到后端的返回值,然后前端再写逻辑。前端不care后端的处理,那么我么在后端可以写一个接口的mock 服务,匹配前端的url,然后直接返回相应的值,不做逻辑处理。
(8)示例:
@RequestMapping("/hello")
public String hello(){
return "Hello Spring boot!";
}
@RequestMapping("/hello2")
public String hello2(){
return "Hello Spring boot2!";
}
在springboot 下使用配置文件来配置bean,也是可以的
@Component
@ConfigurationProperties(prefix = "dog")
Class Dog
(9)快速创建get和set方法
在创建一个备案的时候,配置好属性,在eclipse 中,选中该类,然后 Resource>generator getters and setters,会自动创建get 和set方法,在有多个属性的情况下,能提高效率。
(10)springboot 启动时通过注解,把所需要的配置文件,加入到了spring的容器中。
(11)MVC
M:模型,处理与数据库相关的内容。
V:视图,用户UI页面。
C:控制器Controler,解析url,并指定具体的实现逻辑。
(12)四者相互之间的关系
spring 是基础。
spring mvc,是spring实现了mvc模式。
springboot 整合了spring mvc,使其更加的简单方便。
spring boot 就是微服务,一个springboot的jar 包,我们就可以理解为是一个独立的服务,因为它是可以独立部署的!!!
(13)微服务A和微服务B两个spring boot应用,他们都可以提供对外的接口url,来访问@RestController 修饰的类,当然这两个服务之间也可以相互调用使用彼此的功能。
(14)美团可理解微服务
app 进入,使用。
单车,网关接受请求,把请求进行解析,使用单车服务。
外卖,网关接受请求,把请求进行解析,使用外卖服务。
社区团购,网关接受请求,把请求进行解析,使用社区团购服务。
(15)微服务把代码耦合高的问题给解决了,但是带来了新的问题:
1)分布式数据的同步问题。
2)服务量大,对于运维人员的要求变高了。
(16)springboot 是微服务的应用
springboot 的各个应用 组成了spring cloud
spring cloud 通过各个springboot写的应用实现了如下功能:
分布式/版本化配置
服务注册和发现
路由
service - to - service调用
负载均衡
断路器(服务熔断 和服务降级)
分布式消息传递
(17)关于微服务的测试
对于ui测试人员(web\app\公众号\小程序),后端使用微服务或者不使用微服务,影响不大,基本无感。
好多微服务的接口,前端是无法进行测试的,因为根本没有ui页面。
绝大多数情况下,对微服务的测试就是接口测试。
对微服务提供的接口进行功能、性能、安全测试。
(18)接口测试核心步骤
准备接口测试数据
构建接口(代码或者工具)并发送
解析服务端的接口响应来判断接口测试通过与否
(19)所谓的ORM就是 把数据库的表跟类对应了起来。
比如:类User对应数据库的表t_user2
属性 id ,name,password,对应了表中的三个字段id ,name,password
对三个属性的 get 和set操作,就相当于对 数据库的读写操作
(20)dqm 定义了一些规则,通过这些规则可以创建我们所需要的一些sql语句
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
第一种方式,通过Repository 来进行基础sql语句的操控
UserRepository extends JpaRepository
第二种方式就是sql自定义语句的编写
在respository中定义方法,用@Query去修饰,设置nativeQuery=true
@Query(value="select * from user" ,nativeQuery=true)
public List
findAllInfo(); 第三种方式
DQM,用的较少,几乎都是第一种方式和第二种方式相结合
(21)我们应用db
前提条件,yaml 文件里配置了db的连接信息
1)定义 public interface UserRepository extends JpaRepository
{ } 如果没有需要自定义的方法,那么就空实现
如果有自定的方法,就用@Query ,记住nativeQuery=true
2)在contrller里 引入UserRepository
通常的方式如下:
@Autowired
private UserRepository userRepository;
3)对url进行匹配,在匹配的url里调用db逻辑