MyBatis-Plus
MyBatis-Plus简介MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:https://baomidou.com/
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhe ...
Docker
DockerDocker简介前言问题大型项目组件和运行环境相对复杂,部署时会碰到很多问题:
依赖关系复杂,容易出现兼容性问题
开发、测试、生产环境存在差异,不同部署的服务器存在差异
Docker问题解决Docker如何解决依赖兼容问题
将应用的Libs(函数库),Deps(依赖)、配置与应用一起打包
将某个应用放到一个隔离容器去运行,避免相互干扰
Docker如何解决不同环境的操作系统不同的问题:
要解决这个问题,先要了解一下操作系统结构
内核与硬件交互,提供操作硬件的指令
系统应用封装内核指令为函数,便于程序员调用,用户程序基于系统函数库实现功能
例如:Ubuntu和CentOS都是基于Linux内核,只是系统应用不同,提供的函数库存在差异,这就是用户程序不能跨系统运行的原因。
Docker将用户程序与所需要调用的系统函数库一起打包
用户程序在运行到不同操作系统时,直接基于打包好的库函数,借助于操作系统的Linux内核来运行
总结Docker是一个开源的应用容器引擎
Docker允许将开发中将应用、依赖、函数库、配置打包形成可移植的镜像
Docker应用 ...
Spring Cloud Alibaba(二) Sentinel
Spring Cloud Alibaba(二)SentinelSentinel介绍
随着微服务的流行,服务与服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinel特征
丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。
Sentinel安装与 ...
Spring Cloud Alibaba(一) Nacos
Spring Cloud AlibabaSpring Cloud Alibaba简介Spring Cloud Alibaba的官网:https://spring-cloud-alibaba-group.github.io/github-pages/2021/zh-cn/
Spring Cloud Alibaba致力于提供为微服务开发的一站式解决方案。Spring Cloud Alibaba包含开发分布式应用服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。
基于Spring Cloud Alibaba,我们只需要添加一些注解和少量配置,就可以将Spring Cloud应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。
Spring Cloud Alibaba功能
服务限流降级:支持 WebServlet、WebFlux、OpenFeign、RestTemplate、Dubbo 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:适配 Sprin ...
Spring Cloud(八) Config
Spring Cloud Config对于传统的单体应用,使用配置文件管理所有配置。而在微服务架构中,微服务的配置管理一般有以下需求:
集中管理配置
环境不同,配置不同
运行时可动态调整
配置修改后自动更新
因此对于微服务架构而言,一个通用的配置管理机制必不可少,常见的做法时使用配置服务器管理配置。
Spring Cloud Config简介Spring Cloud Config为分布式系统提供了集中化的外部配置支持,它分为服务端和客户端两个部分即Config Server和Config Client两部分。由于Config Server和Config Client实现了对Spring Environment和PropertySource抽象的映射, 因此,Spring Cloud Config适合Spring应用程序。
Config Server是一个可横向扩展、集中式的配置服务器即分布式配置中心,它作为一个独立应用,用于集中管理应用程序各个环境下的配置,它可以从配置仓库获取配置信息并提供给客户端使用。
Config Client是Config Server的客户端,通过请求配置 ...
Spring Cloud(七) Gateway
Spring Cloud GatewayGateway简介Gateway为SpringBoot应用提供了API网关支持,具有强大的智能路由与过滤器功能,是Spring Cloud的第二代网关组件。
Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5.0、Spring Boot 2和Project Reactor等技术。
Gateway旨在提供一种简单有效的方式来对API进行路由以及提供一些强大的过滤器功能,例如:熔断、限流、重试等。
Gateway基于Spring 5.0的新特性WebFlux进行开发,底层网络通信框架使用的是Netty,所以其吞吐量高、性能强劲。
Gateway特性Spring Cloud Gateway具有如下特性:
基于基于Spring 5、Spring Boot 2和Project Reactor进行构建;
动态路由:能够匹配任何请求属性;
集成Spring Cloud服务发现组件自动转发请求,默认集成Ribbon做负载均衡,默认集成Hystrix的断路器功能网关进行保护;
易于编写Predicate(断言)和Filter ...
Spring Cloud(六) OpenFegin
Spring Cloud OpenFeginRestTemplate可以实现REST API的远程调用,它的请求URL使用字符串拼接的方式,在应对URL中存在多个参数的情况时,这种方式会变得非常低效并且难以维护。
Spring Cloud OpenFegin简介 Spring Cloud OpenFegin是声明式的服务调用工具,它整合了Ribbon和Hystrix,拥有负载均衡和服务容错功能。
Fegin是声明式的服务调用工具,我们只需要创建一个接口并用注解的方式来配置它,就可以实现对某个服务接口的调用,简化了直接使用RestTemplate来调用服务接口的开发量。Fegin具备可插拔的注解支持,同时支持Fegin注解、JAX-RS注解及SpringMVC注解。
Fegin和OpenFegin的区别FeginFegin是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,Fegin内置Ribbon用来做客户端负载均衡,去调用服务注册中心的服务。
Fegin的使用方式:使用Fegin的注解定义接口,调用这个接口就可以调用服务注册中心的服务。
依赖:
123 ...
Spring Cloud(五) Hystrix
Spring Cloud HystrixSpring Cloud Hystrix简介Spring Cloud Hystrix是Spring Cloud Netflix子项目的核心组件之一,是一个用于处理分布式系统的延迟和容错的开源库,具有服务容错和线程隔离等一系列服务保护功能。
在微服务架构中,服务与服务之间通过远程调用的方式实现通信,一旦某个被调用的服务发生故障,其依赖服务也会发生故障,此时就会发生故障的蔓延,导致分布式的系统雪崩和瘫痪。
由于多种因素,例如网络响应、系统故障、硬件问题等,服务发生故障的情况是无法避免的。因此我们需要一个应对服务容错保护的解决方案。
Spring Cloud Hystrix实现了断路器模式,它相当于一种开关控制,通过断路器的故障监控即保险丝,当某个服务发生故障时,通过断路器监控,给服务的调用方返回一个服务于其的,可处理的备用响应响应(FallBack),而不是长时间的等待或者抛出异常,避免联级故障,这样就不会使得调用方由于长时间得不到响应而占用线程从而导致故障的蔓延,提高了分布式系统的弹性。
Hystrix具备服务降级、服务熔断、服务限流、线程隔离 ...
Spring Cloud(四) 负载均衡
负载均衡微服务架构在生成环境中,各个微服务会部署多个实例,负载均衡就是将服务消费者的请求分摊到多个服务提供者实例的过程,它可以增加系统的可用性和扩展性。
当我们使用RestTemplate来调用其他服务时,Ribbon可以方便的是实现负载均衡,版本迭代之后由LoadBalancer替代。
LoadBalancer的优势主要在于支持响应式编程方式异步访问客户端,依赖Spring Web Flux实现客户端负载均衡调用。
RestTemplate-HTTP客户端
RestTemplate是一个HTTP客户端,使用它我们可以方便的调用HTTP接口,支持GET、POST、PUT、DELETE等方法。
这里以Get方法为例,说明RestTemplate远程调用,具体可查看RestOperations接口的方法声明。
GET请求方法
getForObject方法返回对象为响应体中数据转化成对象
getForEntity方法返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头、响应状态码、响应体等。
调试运行可以看到ResponseEntity对象里的具体信息
...
Spring Cloud(三) Eureka
服务注册与发现-Spring Cloud EurekaSpring Cloud Eureka是Spring Cloud Netflix子项目的核心组件之一。主要用于微服务架构中的服务治理。
本章主要介绍微服务远程调用的提供者和消费者、Eureka的简介、Eureka注册中心的搭建、Eureka客户端的搭建、Eureka集群的搭建以及Eureka注册中心添加登录认证的方法。
微服务远程调用的提供者和消费者服务提供者:暴露接口给其他微服务调用
服务消费者:调用其他微服务提供的接口
服务提供者和消费者角色是相对的,一个服务可以同时是服务提供者和服务消费者
服务调用存在的问题在上一个微服务项目中,借阅服务使用RestTemplate调用用户和书籍微服务中的RESTFUL API,但是我们是将服务提供者的请求网络地址(IP和端口等)硬编码在代码中,这样做存在一定的问题:
使用场景局限性强。如果服务提供的网络地址发送改变,将影响整个服务消费者。
无法动态伸缩。在实际的生产环境中,每个微服务一般都会部署多个实例以实现容灾和负载均衡,此外系统还应具备自动伸缩的能力,例如动态增减节点等。显然硬编码的方 ...