摘要:
一、前言 之前写的一篇文章《细说分布式锁》介绍了分布式锁的三种实现方式,但是Redis实现分布式锁关于Lua脚本实现、自定义分布式锁注解以及需要注意的问题都没描述。本文就是详细说明如何利用Redis实现重入的分布式锁。 二、方案 死锁问题 当一个客户端获取锁成功之后,假如它崩溃了导致它再也无法和 R 阅读全文
摘要:
一、前言 责任链模式很多框架都有用到,其中一个经典场景就是Tomcat对HTTP请求的处理。 Tomcat处理HTTP请求时就会处理请求头和请求体两部分,当然,Tomcat的真正实现会将HTTP请求切分成更细的部分进行处理。如果请求各部分的逻辑都在一个类中实现,这个类会非常臃肿。如果请求通过增加新字 阅读全文
摘要:
一、简介 在微服务架构中,我们会有这样的需求,A服务调用B服务,B服务调用C服务,ABC服务都需要用到当前用户上下文信息(userId、orgId等),那么如何实现呢? 方案一: 拦截器加上ThreadLocal实现,但是如果在这次请求中创建了一个新的线程就拿不到了,也就是无法跨线程传递数据。 方案 阅读全文
摘要:
一、背景 传统的单体应用基于cookie-session的身份验证流程一般是这样的: 用户向服务器发送账户和密码。 服务器验证账号密码成功后,相关数据(用户角色、登录时间等)都保存到当前会话中。 服务器会生成一个sessionid返回浏览器,浏览器把这个sessionid存储到cookie当中。 以 阅读全文
摘要:
一、Interceptor介绍 Mybatis 允许用户使用自定义拦截器对SQL语句执行过程中的某一点进行拦截。默认情况,可以拦截的方法如下: Executor 中的 update()、query()、flushStatement()、commit()、rollback()、getTransacti 阅读全文
摘要:
对于服务注册中心、服务提供者、服务消费者这个三个主要元素来说,服务提供者和服务消费者(即Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者(服务注册、续约、下线等),而注册中心主要是处理请求的接收者。所以,我们从Eureka的客户端为入口分析它是如何完成这些主动通信的。 一般情况下,我 阅读全文
摘要:
参考:https://www.jianshu.com/p/7eb0c2b214a7 阅读全文
摘要:
一、前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但是最近看公司的wiki基于Spring事件的领域驱动才发现原来还有这么多东西。 二、订阅/发布(观察 阅读全文
摘要:
一、前言 心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。 我们用到的很多框架都用到了心跳检测,比如服务注册到 Eureka Server 之后会维护一个心跳连接,告诉 Eureka Server 自己还活着。本文就是利用 Netty 来实现心跳检测, 阅读全文
摘要:
一、什么是Starter? 在开发过程中我们就经常使用到各种starter,比如mybatis-spring-boot-starter,只需要进行简单的配置即可使用,就像一个插件非常方便。这也是SpringBoot非常重要的一个特性——自动化配置。 二、实现 2.1创建一个maven项目并配置pom 阅读全文