# 第 6 章 服务治理,自定义拦截方法

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

# 一、前言

你只管码业务,剩下的交给中间件!

通常我们在做业务系统开发时,遇到的通用共性技术待解决方案时,都可以凝练成可复用的技术组件。最终理想的情况下,业务需求的开发过程是只关心具体的业务逻辑实现的。

Java 程序的开发都以追求面向对象为目的,这可以理解为汽车的组件化的装配、电脑配件的更换、插座与插销使用等等。通过这样的方式提升整体代码的可复用性,一般在 SpringBoot、SpringCloud 中都能体会到这种设计方式的存在,例如注解、切面、代理都是具体的实现方式。

我们也可以将这种技术的迁移到自己实现的中间件中,来解决在业务场景开发过程中遇到的共性问题。本章我们就尝试借用 SpringCloud 里在方法上使用注解加载额外处理方法,扩展原有方法的功能。

# 二、需求背景

在服务治理层面,我们通常会想到熔断、降级、限流、切量等各类操作,因此也把这些功能集成到统一的中间件中供业务系统使用。

但有些时候每个业务系统因需求的多样性,可能还会有一些额外的场景需要被治理,如果这个时候中间件原有的功能就不能满足了,不得已每一个业务系统又单独开发相应的功能,最终导致的情况就是这个中间件处于一个尴尬的存在,删也不行,留也不好。

因此我们需要让中间件在设计的时候,给业务留出一个可自定义逻辑的口子,让业务系统可以自行扩展一些服务功能。这样对于中间件来说,就有了成长的时间,可以再后续把通用的同类功能,完善在中间里,待后续版本发布时就可以迭代升级使用了。