Dubbo降级&容错机制 Dubbo降级&容错机制在分布式环境中,由于所有的服务不在同一台服务器中,就涉及到服务之间的调用,而远程调用涉及到网络,网络是不可靠的,这就导致了有时候远程调用会失败,这时候就需要容错机制而服务降级机制,是指在流量特别大的情况下,我们主动关闭一些不重要的服务,将资源向核心服务倾斜,被关闭的服务就会做服务降级服务降级服务降级就是我们将一些不重要的服务屏蔽掉,当有别的服务对被降级的服务发起远程调用时,不发起调用,而是执行本地的服务降级逻辑首先我们构建一个提供者服务,用于获取用户的地址@Ser
Dubbo常用配置 Dubbo常用配置使用Dubbo作为项目的RPC框架,可以根据项目实际需要,选择Dubbo提供的自定义配置,本文介绍了Dubbo常用的配置选项启动时检查默认情况下,消费者服务启动时,会检查注册中心是否有启用的提供者服务,如果没有,会造成检查不通过,启动失败有时候在开发过程中,需要绕过启动检查,可以使用check属性,将值设置为false既可@Servicepublic class OrderServiceImpl implements OrderService { @DubboRef
Dubbo负载均衡策略 Dubbo负载均衡策略在分布式环境中,一般都有多个提供者服务,形成一个集群,在多个提供者的环境下,每次调用服务使用哪个提供者,这就涉及分布式的负载均衡策略,Dubbo为我们提供了四种负载均衡策略,分别是随机,轮询,最小活跃以及一致性Hash为了测试,我们创建一个服务提供者,用于查询用户地址,并且记录是哪个提供者,以及被调用的次数和调用的参数,在测试的时候,启动多个提供者来测试不同负载均衡策略下的调用效果@Service@DubboService@Slf4jpublic class UserSer
搭建Dubbo监控面板 搭建Dubbo监控面板Dubbo官方为我们提供了一个监控中心dubbo-admin,可以让我们在使用Dubbo时,监控和控制服务的状态,使用监控面板更方便地管理服务,不过这个监控中心是一个单独的项目,需要我们下载并启动首先从github上将项目克隆到本地,地址如下:dubbo-admin项目地址启动后端服务新版dubbo-admin项目是一个前后端分离的项目,需要分别启动前端和后端项目,启动后端项目之前前请确保Zookeeper正在运行打开项目下的dubbo-admin-server项目,这就是
Dubbo简单体验 Dubbo简单体验Dubbo是一款高性能的RPC框架,他主要实现了在分布式系统中,服务之间的相互调用,也支持一些负载均衡策略和限流降级策略。由于Dubbo在通信协议层使用自有的二进制流协议传输,因此效率比基于Http协议的RPC框架效率要高,也因此Dubbo成为了现在分布式系统领域中炙手可热的一个框架在使用Dubbo之前,需要先介绍一下分布式系统中的几个概念以下是Dubbo官网中的一张图片,可以看到,在分布式系统中,一个服务要去远程调用另一个服务,则调用方为“消费者”,被调用方为“提供者”在分布式系
事务的传播机制 事务的传播机制事务的传播行为就是在两个都启用了事务的方法进行嵌套调用时,外层事务和内层事务的执行动作,Spring支持七种传播方式,他们的效果如下:REQUIRED:如果有外层事务,则加入这个事务,否则开启一个新的事务SUPPORTS:如果有外层事务,则加入这个事务,否则就以非事务方式执行MANDATORY:如果有外层事务,则加入这个事务,否则抛出异常REQUIRES_NEW:开启一个独立的新事务执行NOT_SUPPORTED:方法不应该以事务方法执行,如果有外层事务,就以非事务方式执行NE
声明式事务 声明式事务事务是描述对数据库的一组操作,比如在转账业务中,A向B转了一笔钱,那么从A的账户中扣款和把钱打入B的账户这两个数据操作就应该放在一个事务中,不允许只单独执行其中一个操作,如果在事务执行过程中有错误产生,则整个事务中的操作需要全部回退。关于事务可以了解一下事务的ACID特性Spring对事务做了支持,可以用注解标记一个方法中的操作为一组事务,这就是Spring声明式事务为了测试,我们创建一个Service类,定义一个新增操作的方法,这个方法一定会产生一个异常,来模拟业务产生错误的情景@Ser
整合Swagger 整合Swagger在现在的web开发中,前后端分离的开发模式大行其道,前端负责页面渲染,并发送请求到后端服务器请求数据,后端负责数据访问和处理,然后返回数据给前端在前后端开发的模式中,接口的定义在协同开发中就非常重要,前端开发人员需要清晰地知道后端接口的用途,需要的参数和返回的数据,因此在开发中需要一份接口文档。Swagger是一款流行的Api框架,他可以定义Api接口的参数和返回值,并且支持同步更新和在线调试,解决了这个问题基本使用使用Swagger,需要导入Swagger的starter依赖,本
Spring Boot发送邮件 发送邮件在web开发中,发送邮件是一个很常用的功能,Spring Boot也集成了发送邮件的功能基本使用使用Spring Boot的发送邮件功能,需要导入邮件的starter依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>
Spring Boot异步任务 异步任务在业务开发中,有一些业务流程耗时会比较长,这样会使前端发送请求后一直等待响应,但是有一些业务逻辑不需要有很强的及时性,例如发短信,发邮件等等,这些业务逻辑由于要进行网络通信,耗时比较长,却不需要在真正完成业务逻辑之后才响应给前端,对于这种业务场景我们可以使用异步任务机制,将响应立即返回给前端,然后开启异步线程执行慢业务逻辑,这样会大大提升用户体验使用多线程的方式可以实现异步的功能,但是线程的编写比较繁琐,Spring Boot帮我们封装了异步任务的功能,让我们可以简单地实现异步任务首先我们来模
整合Shiro 整合ShiroShiro是一款开源的轻量的权限管理框架,他能实现用户的认证和授权功能,也可以实现密码加密功能基本使用使用Shiro,首先需要导入starter依赖<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.7.0</
Spring Boot定时任务 定时任务在开发中,我们经常会用到定时任务的功能,例如定时同步数据,定时发送邮件等等,Spring Boot也提供了定时任务的功能基本使用要使用定时任务,首先需要开启项目的定时任务功能,只需要在启动类或者配置类中添加@EnableScheduling注解@EnableScheduling@SpringBootApplicationpublic class SpringDemoApplication { public static void main(String[] args) {
JSR303参数校验 JSR303参数校验在进行web开发时,对于前端发送的参数,需要进行合法性验证,虽然前端也会进行验证,但是用户仍然可以使用postman等工具或者手动拼接url等方式绕过验证,因此后端也需要验证要验证参数,可以使用JSR303校验机制,他适用于大多数验证场景基本使用使用JSR303校验,首先需要导入对应的starter<dependency> <groupId>org.springframework.boot</groupId> <artifactId
整合Spring Session 整合Spring Session在web开发中,我们会使用Session来存放当前登录用户的信息,不过这么做有许多弊端,比如Session底层是一个存放在本地内存的map集合,这使得在分布式集群环境下无法在集群内的多台机器中共享Session,而且登录的用户一旦多,本地存放Session的方式也会使得内存资源紧张,因此我们可以使用Redis来存放SessionSpring Session是Spring官方提供的一个用于解决分布式Session的框架,他也支持使用Redis来存放Session,而且使用简
整合Spring Cache 整合Spring CacheSpring Cache是Spring框架为我们提供的一个缓存抽象层,无论我们使用一个map作为本地缓存,还是EnCache和Redis这种专业的缓存,都可以使用Spring Cache方便地集成,使用起来也很简单,使用注解在业务逻辑方法上标注,即可完成缓存操作,而不用将缓存操作和业务代码耦合在一起基本使用使用Spring Cache,首先需要导入对应的starter依赖<dependency> <groupId>org.springfra
整合Redis 整合RedisRedis是一款高性能的非关系性数据库,他基于内存存储数据,并且在底层做了数据结构优化,读写的效率都非常高,在开发中往往作为数据缓存的首选。在使用Spring Boot开发web应用时,可以使用Spring Boot官方提供的starter轻松整合Redis到项目中导入依赖使用Redis,首先需要导入对应的starter<dependency> <groupId>org.springframework.boot</groupId> &
单元测试流程控制 单元测试流程控制Spring Boot默认使用JUnit5作为测试框架,而JUnit5提供了丰富的API和注解,方便我们对测试的流程做控制断言断言机制就是在测试方法中编写判断逻辑,如果满足逻辑则测试成功,不满足则测试失败,简单的断言有以下几种:assertEquals:判断两个对象或两个原始类型是否相等assertNotEquals:判断两个对象或两个原始类型是否不相等assertSame:判断两个对象引用是否指向同一个对象assertNotSame:判断两个对象引用是否指向不同的对象as
Spring Boot单元测试 单元测试使用Spring Boot进行开发,就会涉及到做单元测试,而Spring Boot帮我们集成了单元测试框架JUnit5,在我们创建完一个Spring Boot项目之后,可以直接使用Spring Boot整合的单元测试功能基本使用使用单元测试功能,需要以下依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte
Spring Boot打印日志 打印日志Spring Boot默认使用Slf4j日志门面和Logback日志实现,关于日志门面和日志实现的关系,可以使用以下Slf4j官网的这张图表示,日志门面是日志实现的抽象层,我们调用日志的接口时应该调用日志门面的接口但是有时候一些框架的日志不是用slf4j的规范,这时候可以使用桥接jar包去转换,在Spring Boot整合其他框架的时候也是这么实现的,桥接的原理如下图所示输出日志在Spring Boot中打印日志,可以使用Spring Boot默认的Slf4j接口,使用日志工厂类Logg