城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

我开发了一套分布式接口重推系统

4月4日 乔了了投稿
  功能介绍
  业务开发中会有方法重推的需求,比如调用第三方系统接口,如果调用失败,需要能够重推,重推后需要更新业务信息,例如业务单据的状态更新为:推送失败(成功)。
  因此决定写一套通用的接口重推功能,能实现自动重推和手动重推。并且记录的接口调用的信息。
  该功能模块目录如下:
  主要功能为:1。在需要记录日志的方法上面添加注解2。调用方法,调用信息记录数据库3。调用重试方法,重试调用异常方法
  日志记录注解
  注解EnableLog说明:Target({ElementType。METHOD})Retention(RetentionPolicy。RUNTIME)DocumentedpublicinterfaceEnableLog{OperationTypetype();接口提供方returnStringprovider();StringcurrentSystem()defaultStringUtils。EMPTY;类型IN本系统对外apiorOUT调的外部接口returnModelTypemodel();成功标志StrreturnStringsuccessStr()defaultStringUtils。EMPTY;允许重试次数,默认1,即可无限重试returnlongallowRetry()default1;是否自动重试0否returnStringneedAuto()defaultSystemConstant。NO;方法描述returnStringdesc()defaultStringUtils。EMPTY;}
  调用示例EnableLog(typeOperationType。INSERT,providerOA,modelModelType。OUT,successStrsuccess,descOA接口消息提醒)publicStringsendNotify(OaTaskMessageoaTaskMessage){OaMessageParamoaMessageParamBeanUtils。copy(oaTaskMessage,OaMessageParam。class);oaMessageParam。setOpenMode(5);oaMessageParam。setModuleCode(srm);oaMessageParam。setMsgType(1);returnoaApiClient。sendMessage(oaMessageParam);}
  参数说明:1。type:目标方法的操作类型。增,删,改,查2。provider:接口来源方3。model:IN本系统对外apiorOUT调的外部接口4。successStr:指定接口调成功的返回5。目标方法的描述重试方法(手动)
  如果标出的方法调用异常,那么就可以执行这个重试方法。该方法主要执行逻辑为:1。在日志记录表获取指定主键id的异常状态方法调用记录2。重复执行次数校验3。反射执行方法4。更细记录状态重试方法(自动)
  该系统默认手动重试,如果在EnableLog注解中我们设置needAutotrue,那么系统自动重试,自动重试功能如下对注解标注的方法放入redis阻塞队列异常重试线程消费阻塞队列
  放入异常队列exceptionResultQueueService。pushExceptionQueue(logId);
  重试线程消费阻塞队列中的值:privatevoidloop(){StringnameThread。currentThread()。getName();log。info(异常方法重试线程启动,当前线程:【{}】,name);while(!Thread。interrupted()){StringapiLogId(String)redisUtils。blockRightPop(EXCEPTIONQUEUEKEY);LogExecutor。LogMethodParamparamnewLogExecutor。LogMethodParam();param。setLogId(apiLogId);logExecutor。executorMethod(param);每隔5s循环一次。减少资源消耗try{Thread。sleep(5000);}catch(InterruptedExceptione){e。printStackTrace();}}}异常重试后业务处理扩展
  如果重新执行方法后需要处理业务逻辑,可以使用这个扩展接口ComponentpublicclassExampleRetryResultHandlerimplementsRetryResultHandler{OverridepublicStringresultHandler(Objectobj){重试方法执行后业务处理}OverridepublicStringinvokeMethodStr(){}OverridepublicStringmethodName(){returnsendTaskM}}
  只需实现RetryResultHandler接口即可。
  RetryResultHandler说明如下:publicinterfaceRetryResultHandler{方法结果处理器paramobjreturnStringresultHandler(Objectobj);该方法的父层调用方法,全路径returnStringinvokeMethodStr();Enable注解标注的方法名称returnStringmethodName();}
  业务处理逻辑写在resultHandler()方法即可。invokeMethodStr()为该方法的父层方法(全路径),methodName()为该方法的方法名称。
  至此,一套方法日志记录,方法重试的系统完成。分布式系统调用
  在分布式系统中,各系统如何调用这个公用的重试方法呢,我们需要将上述功能封装到一个SDK中,需要调用的系统就引入这个SDK。各业务系统中引入SDK后编写Controller层方法:RestControllerRequestMapping(apiLog)publicclassApiLogController{AutowiredprivateSysLogApiClientsysLogApiC执行调用异常的方法returnApiMetadata(actionName执行调用异常的方法,permissionLevelPermissionLevel。PermissionRequired)PostMapping(valueexecutorExceptionMethod)ResponseBodypublicObjectexecutorExceptionMethod(RequestBodyLogMethodParamparam){returnsysLogApiClient。executorExceptionMethod(param);}}
  同时我们需要一个公共服务,该公共服务需要写一个共前端调用的重试接口,前端传入logId,通过路由执行各个业务系统中SDK的executorExceptionMethod方法。
  这样就可以实现在分布式系统中调用公共方法去执行重试了。
  本篇内容到这里就结束了,如果内容对你有帮助,欢迎点赞收藏。
投诉 评论 转载

马来西亚大选结束,97岁的马哈蒂尔惨败,三大联盟为何无一胜出据新华社报道,在刚刚结束的马来西亚大选中,没有哪个单一政党或政党联盟赢得议会多数席位。马来西亚大选马来西亚的政治制度与其前宗主国英国类似,国会分为上下两院。其中,下……退休后,你愿意去农村生活吗?哈哈:这个问答真有点无离头,你以为农村就一定是很差的吗?我作广州市退休的,现在就在佛山市南海的农村生活,在一个叫下亨田的村租了一套两房一厅自住,而且一住巳有7年多了。这里空气好……龙华街道人民武装部开展军事日活动12月16日下午,深圳市龙华区龙华街道主要领导班子前往白石龙文化名人大营救纪念馆开展军事日活动。大家认真了解了1941年12月,侵华日军占领香港,致使大批文化民主人士滞留……微距头可以当人像镜头吗?怎么不可以呢,完全可以的。比如佳能的100百威头,2470f4。0,尼康的1052。8等等,它们都是微距镜头,不仅仅是专门拍摄微距的,而且拍摄人像照样可以。你在拍摄时,不要用微……托人帮买彩票中了48万,奖金该归谁?本报讯(记者安海涛通讯员蒋紫薇)委托他人购买彩票,结果中了大奖,由此引发奖金的归属问题,双方闹上法庭。近日,福建省厦门市海沧区人民法院宣判一起彩票纠纷案,一审判决所有奖金归属于……国家统计局11月PPI同比继续下降中证网讯(记者连润)国家统计局12月9日公布数据显示,11月份,PPI环比微涨,同比继续下降。从环比看,PPI上涨0。1,涨幅比上月回落0。1个百分点。生产资料价格由上月……炒股多年,你是否已放弃技术分析?能不能说说你的心得?技术分析好用的不得了,用了技术以后从此不用再听消息操盘,每天一惊一乍的。技术分析是个预测成功概率问题,如何完全掌握它,灵活运用,要靠悟性。我真的看到大学教授在这方面深耕10年,……最近我想买长安汽车,不知道哪一款省油,有哪些推荐?我是18款逸动车主,去年5月买的车。排量1。6,平时上下班开,基本国道,山路也有,现在油耗6点多,平均下来一公里4毛多,感觉省油。目前跑了2万公里,没任何毛病。现在上了一个1。……蜜柚之乡的生态转型之路平和县霞寨镇高寨村的柚海美景李国华摄主播在为平和蜜柚直播带货。李嘉琳摄金秋十月,柚果飘香。漳州平和县又迎来了蜜柚采收和旅游的丰收季,在漫山遍野的果园里,果农们正在采……你喜欢影视歌曲明星吗曾经年轻时我喜欢流行歌曲,演唱歌星有好多。香港四大天王,小虎队,草蜢队,林忆莲,黄安,黄家驹等等。如今已过去十几年,不太喜欢追星了,也不喜欢看影视剧了,感觉青春年少以成过……中国花滑协会主席申雪参加北舞开学典礼隋文静将访学一年新华社北京9月9日电(记者李嘉)中国花样滑冰协会主席申雪9日上午出席北京舞蹈学院2022年新生开学典礼暨庆祝教师节表彰大会,称赞北舞对中国花样滑冰发展的贡献,并期待可以与北舞深……我开发了一套分布式接口重推系统功能介绍业务开发中会有方法重推的需求,比如调用第三方系统接口,如果调用失败,需要能够重推,重推后需要更新业务信息,例如业务单据的状态更新为:推送失败(成功)。因此决……
北溪管道破裂的后果德国的背刺普京的沉默土耳其的躺赢同为二月河作品,为何魏东亭在康熙王朝雍正王朝中的死因不同?许昕当选亚乒联盟副主席。刘国梁表示祝贺,许昕最优秀吗?用内部特供酒招待朋友更有面子?注意!这种酒早被禁了河南小伙为报恩,将瑞士房东接回国赡养,连结婚都要带上,老人遗聊斋故事男子帮白蛇渡劫,白蛇说午夜子时,要下三天三夜大雨华为新机发布在即,相关卫星通信技术有何来头?苹果或也具备富滇银行普惠金融助力小微梦乡村振兴服务彩云南中越战争对越自卫还击作战(2)Notion产品体验设计拆解24个优秀体验细节醋坛子背后的故事政治斗争才是真相盘点成功为王朝续命的肱骨之臣
小学作文严格的妈妈春天喝八汤,营养又健康,八道汤指啥?做法简单,轻松驾驭中国留学生入境有望免隔离!赴英后如何办理入境4类手续?心之助心悦会让我们在这里相遇难忘的聚会孕妇感冒了怎么办治疗孕妇感冒偏方教给您圣经的历史读后感精选哺乳假能一次性休吗中国离海最远的城市乌鲁木齐,距离海洋达2500公里科学家警告外星微生物入侵强调行星生物安全的必要性不穿鞋能在跑步机上跑步吗怎样成为一名心理咨询师?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁