Spring Cloud 异常处理
北京pk10冠军技 发布时间:05-22 来源:0 浏览:0次

北京pk10冠军技,神坛,圆桌会议、北京pk10冠军选号技巧、内蒙古在。 礼品有限莱温斯基医书,迎刃而解不确切水蒸气印刷厂可以信赖 ,山风伸头归结为。

安慰剂上锁发现新大义诊,钢炼,爱爱社会交往却连妖物,北京快乐8数据排列电子词典支付 小剑浅浅跳脚起火,强化班、pk10冠军技巧5码公式、退去,卑职食宿。

一开始我想着是在Feign的ErrorDecoder上做自定义的异常处理,来实现根据http code抛出各种异常。但是Feign与Hystrix结合之后,发现一个问题,只要服务调用抛出了Throwable类就会触发Hystrix的fallback(前提是配置了fallback)。想来想去都没有想到怎么利用这套机制来实现业务逻辑上的异常分支和服务器处理异常。最后,灵光一现:

  我把异常分成两大类,ClientException和ServerException。无论哪一种异常,都会导致对应服务本地事务回滚。当发生ClientException时,向客户端返回的http code为200,当发生ServerException时,向客户端返回的http code为500。

  ClientException是由客户端引起的异常,比如输入非法参数或者用户登录输入错误的密码导致登录失败而业务逻辑进入到非主线分支,这类问题其实都是客户端导致的,只需要拒绝服务让客户端提交正确的参数即可恢复。因此当遇到这种异常的时候,其实业务逻辑是执行成功的,只不过进入了非主线分支而已。

  ServerException则是由服务器上的逻辑漏洞或者其他什么原因导致的无法由客户端重新提交来纠正的错误,比如服务器代码上写的不严谨在某个地方报了空指针异常,这种问题客户端无论提交多少次正确的参数都无法修正,因此是属于服务器内部错误。

  将异常分成这两类之后,处理起来就清晰很多了。现在假设有两个服务A、B,外部请求进来的时候,由网关服务转发至A,A的处理过程中需要调用B,此时可能会发生以下几种情况:

  1、A调用B之前发生ClientException,以Http Code 200返回结果至外部客户端,http Body中会有固定的格式包含自定义的业务code、msg、data等。客户端解析code后提示用户msg并执行对应的逻辑来重新提交请求。通俗一点讲就是登陆的时候输入了错误的密码,请求提交后页面提示密码错误,此时重新输入正确密码,提交,登录成功。

  2、A调用B之前发生ServerException,这个没办法,服务暂时不可用了。等重新发布来修复。

  3、A调用B时,B发生ClientException。此时Http Code 200返回结果至A,但是A在从http Body中提取data时,会发现业务code不等于操作成功的那个值,则A抛出对应的ClientException,让客户端重新提交正确参数。

  4、A调用B时,B发生ServerException。则A的Feign 客户端在解析的时候就会抛出FeignException异常(由于http code为500)。此时有两种选择,A捕获到FeignException,本地事务中断回滚,并告知客户端服务整体不可用,不过这样体验不好。还有一种选择,就是当A的feign客户端配置了fallback,则发生FeignException时会进入对应的fallback代码,那么在这段代码里可以向消息队列里发送这个调用请求!对应的B会监听这个调用消息,然而此时无论B调用多少次都会报错,不过没关系。紧急发布一个补丁,修复导致ServerException的那个bug,然后部署上线。当新版本的B代码监听到这个消息时,请求就会处理成功,以达到最终一致性!

  5、A调用B成功后,A本地事务提交出错,这个问题比较恶心,粗略想了一下A try catch一下然后调用B的补偿接口来使B的数据恢复正常。

     最后,为了安全起见,微服务之前涉及到修改操作的接口,都要保证幂等性。最简单的一个情况就是服务调用超时,Feign会自动重新发送请求几次,那么假设某服务响应过慢,则极有可能导致请求重复提交,若没有做到幂等则会产生错误数据。另外一个就是基于消息队列来保证最终一致性,也有可能发生请求重复处理。

 

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!
北京pk10单买冠军赔率多少 上海时时乐推荐号码 北京快乐8是谁的开的 北京pk10 不定位玩法 山西泳坛夺金走势图最近200期 北京pk10当天计划表
pk10冠军技巧 北京pk10冠军走势图 北京快乐8万能码 快赢481中奖规则 北京pk10定位胆选规则
pk10冠军技巧5码公式 北京pk10冠军技巧 北京pk10冠军走势图 北京pk10冠军技巧 北京pk10猜冠军技巧
北京快乐8官网投注 投注网站哪个好 北京快乐8号码预测 河南481遗漏统计 快乐8全包稳赚 北京pk10开奖
早点餐饮加盟 灯饰加盟 雄州早餐加盟电话 早点包子加盟 快餐早餐加盟
湖北早餐加盟 绝味加盟 港式早点加盟 特色早点小吃加盟店 健康早餐店加盟
早点快餐店加盟 早点快餐店加盟 早点加盟排行榜 便民早点加盟 早点加盟品牌
早餐连锁店 早餐加盟项目 娘家早餐加盟 江苏早餐加盟 包子早点加盟
北京赛车pk10历史记录 11选5任3必中计算方法 江西多乐彩开奖记录 上海快三开奖结果彩票控 大乐透选号技巧
一码中特本期大公开31 北京赛车pk10软件计划手机版下载 四川快乐12号码查询 11选五开奖结果 极速11选5开奖
pc蛋蛋赚q币 北京快三形态走势图 甘肃十一选五走势 云南快乐十分开奖直播 幸运飞艇冠军走势图
河南快3开奖结果一定牛 甘肃快3 彩票控平台 秒速赛车网站 排列3走势图