前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud 网关异常处理实践

Spring Cloud 网关异常处理实践

原创
作者头像
码代码的陈同学
修改2018-05-16 08:58:12
2K4
修改2018-05-16 08:58:12
举报

文章来源:陈同学 | 异常处理实践

本文分享自己关于异常处理的理解。

为什么需要异常处理机制?

良好的异常处理机制带来许多好处,例如:

  • 及时发现问题,别让用户找上门时我方还一头雾水
  • 辅助开发人员准确定位问题
  • 统计分析

…...

异常机制要达到什么效果?

异常信息受众有两类:人和机器.

  • :用户、运营、开发人员等
  • 机器:根据状态码程序进行处理

针对受众,各方的需求可能有:

  • 用户:给用户看得懂的反馈,例如:密码错误
  • 运营:根据信息能判断 哪个用户、在什么时候、做什么操作时、发生了什么问题
  • 开发人员:根据信息能判断用户环境(用户、Token等)、请求信息(请求方式、数据格式、请求的数据、URL、请求时间)、异常信息(stacktrace、异常状态码、异常消息)、日志信息(报错时的关键ID、单据等)、服务信息(哪个服务、哪个实例、在哪台机器)等

如何进行异常预警?

异常预警要根据团队及业务情况来,初创团队简单处理,有余力再好好整。

  • 简单处理:出现异常发个邮件通知即可
  • 稳妥处理:由于非工作时间大家不一定看邮件,严重异常除普通预警,还可以进行:短信通知、微信通知、自动语音拨号等措施,做到哪怕人在睡觉,只要通讯正常,也能把人抓起来

有余力可以自建异常处理平台,有一套异常处理流程,有个炫酷且实用的Dashboard。

SpringCloud网关处理异常案例

目前我们使用的异常处理方式,请根据红色序号阅读:

案例

网关异常处理
网关异常处理

流程简析:

  • 1.用户发起请求,经负载均衡后最后达到网关
  • 2.网关路由到具体的服务某实例
  • 3.服务实例运行时抛出了异常,服务需在最上层捕获异常并封装好数据返回到网关.

例如:结合@ControllerAdvice + @ExceptionHandler捕获异常,创建一个异常处理starter让各个服务直接引用maven依赖,starter中直接注入异常处理Bean,这样具体服务开发时不用关心异常处理,专注业务即可。同时将异常处理与业务模块解耦,便于后续拓展异常处理。

  • 4.服务返回封装好的数据返回到网关
  • 5.网关针对异常处理进行处理,为了保证性能,网关仅初步处理异常

e1.解析异常码: 由网关解析异常码的好处是:具体服务只需要用枚举类定义异常状态码,不需要关心异常对应的提示信息。同时也只需要网关连接到缓存(例如:redis)

e3.纠正HTTP状态码:网关和具体服务之间可以通过任意状态码通讯,但到网关时必须将HTTP状态码调整为HTTP标准状态码

  • 6.用户得到可读的反馈信息

为什么用网关处理异常?

出于以下几个考虑,使用了网关来处理异常:

  • 若异常交给具体服务处理,那么各个团队在代码中处理异常的方式将 "形色各异",不好统一管理
  • 开发人员应该专注于业务,知道合理的抛出异常即可,具体服务不应该重复做相同的事情
  • 异常状态码对应的异常消息应该统一读取,具体的服务不允许直接访问缓存服务器
  • 异常处理流程本身较为复杂,例如:持久化、预警等,各个服务不需要做同样的事情

这个思路和AOP的理念有点类似

预警数据Demo

上面扯了很多异常效果,下面展示下我们团队的邮件预警效果(数据无实际意义,拼凑而成):

exception mail
exception mail

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么需要异常处理机制?
  • 异常机制要达到什么效果?
  • 如何进行异常预警?
  • SpringCloud网关处理异常案例
    • 案例
      • 为什么用网关处理异常?
      • 预警数据Demo
      相关产品与服务
      负载均衡
      负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档