Java入门(九):微服务

目录

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

9. 微服务

9.1 概念

(1)微服务英文名称Microservice,微服务架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务可以独立地编译及部署,并通过各自暴露的API接口相互通讯。它们彼此相互协作,作为一个整体为用户提供功能,却也可以独立地进行扩展。                  

(2)微服务简化了开发,它将创建复杂系统的任务切分为数十乃至上百个小服务,这些小服务易于被小型的软件工程师团队所理解和修改。但是微服务并未真正地消除复杂性,而是将复杂性迁移到对大量服务的连接、管理和监控上。

        

9.2 Spring Cloud

(1)什么是Spring Cloud?

是基于SpringBoot的一整套实现微服务的框架。

(2)Spring Cloud的作用?

它提供了微服务开发所需的多个组件:

配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话、集群状态管理等组件

(3)官网 https://spring.io/projects/spring-cloud/

      Java入门(九):微服务_第1张图片

9.3 Spring Cloud和Spring Boot的关系:

(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。

        

9.4 Spring Cloud特点

(1)分布式/版本化配置

(2)服务注册和发现

(3)路由

(4)service - to - service调用

(5)负载均衡

(6)断路器

(7)分布式消息传递

        

9.5 Spring Cloud 核心组件: 

Java入门(九):微服务_第2张图片

      

9.6 微服务测试

(1)微服务测试的本质是接口测试

(2)重点:微服务架构下,既需要保障各服务内部每个模块的完整性,又需要关注模块间、服务间的交互。

(3)难点:

1)关联性:微服务通常情况下会与多个微服务进行交互。当某服务发生变化时,会直接影响到依赖的其他服务。

2)可靠性:为了尽可能降低微服务间通信对网络情况的高度依赖,降低因网络不稳定引起的故障率,设计微服务架构时会设计隔离机制。

3)数据一致性:微服务是基于分布式系统设计的,需要考虑分布式系统数据一致性的问题。

10. 小结

(1)如果自动化扫描,那么他肯定是找标签@Aspect。

(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逻辑

你可能感兴趣的:(一.,测开之Java(自用),java,spring,boot,spring,微服务)