当前位置: 首页 > news >正文

个人网站的建设流程wordpress 地方门户

个人网站的建设流程,wordpress 地方门户,河源网站建设工作室,外行做网站文章目录 1 问题背景2 前言3 多处重复的重试机制代码4 优化后的代码5 进一步优化 1 问题背景 在电商场景中#xff0c;会调用很多第三方的云服务#xff0c;比如发送邮件、发起支付、发送验证码等等。由于网络存在抖动#xff0c;有时候发起调用后会拿到500的状态码#xf… 文章目录 1 问题背景2 前言3 多处重复的重试机制代码4 优化后的代码5 进一步优化 1 问题背景 在电商场景中会调用很多第三方的云服务比如发送邮件、发起支付、发送验证码等等。由于网络存在抖动有时候发起调用后会拿到500的状态码io exception等报错因此需要重新调用简称重试机制。项目中很多地方用到重试机制导致很多重复的代码因此笔者考虑使用Java8函数式接口优化该重试机制抽成一个工具类方法。 2 前言 本文的代码中可能有些类型没有给出代码不需要纠结主要了解函数式接口怎么应用即可 3 多处重复的重试机制代码 项目中多次出现的代码如下 BasicResponseString response null;int retryTimes 0;do {try {String startTimeStr DATE_TIME_FORMATTER.format(LocalDateTime.now());response restTemplate.postForString(basicRequest); // 此行代码是可变的可能是get方式请求可能是post方式String endTimeStr DATE_TIME_FORMATTER.format(LocalDateTime.now());PayReq logObject PayReq.getLogObject(payReq);log.info(XXXPay payOrder, request:{}, response:{}, startTimeStr:{}, endTimeStr:{}, retryTimes:{}, JSON.toJSONString(logObject), JSON.toJSONString(response), startTimeStr, endTimeStr, retryTimes);} finally {if (response ! null !response.getCode().equals(HttpStatus.SC_OK)) {try {Thread.sleep(500L);} catch (InterruptedException e) {e.printStackTrace();}}retryTimes;}} while (!response.getCode().equals(HttpStatus.SC_OK) retryTimes 3);分析 如上所示在这行代码response restTemplate.postForString(basicRequest);是可变的有可能是get方式提交http请求有可能是post方式。因此要把此处抽象出来交给调用者写具体实现。调用者需要拿到http响应报文那么抽象出来的接口需要有返回值。那么此处可以使用Supplier函数式接口或者自己定义一个有返回值的函数式接口也可以。 在log.info打日志这行需要打出响应报文、开始时间、结束时间、重试次数等这些都可以抽到工具类里面但是日志的内容XXXPay payOrder这些是可变的应该交由调用者写具体实现。那么我们可以定义一个函数式接口出来有入参但无返回值入参是提供给调用者使用的。 4 优化后的代码 定义一个打日志的函数式接口 /*** 打日志的函数式接口* * param T*/ FunctionalInterface public interface LogFuncT {/*** 打日志* * param response 响应报文* param startTimeStr http调用开始时间* param endTimeStr http调用结束时间* param curTime 当前重试次数*/void log(T response, String startTimeStr, String endTimeStr, int curTime); }Http重试工具类如下主要关注有代码注释的那两处地方即可 Slf4j public class HttpRetryUtil {private final static DateTimeFormatter DATE_TIME_FORMATTER DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss:SSS);public static T T retryOnException(SupplierT supplier, LogFunc logFunc,int maxRetryTimes, long sleepMillis) {T result null;int retryTimes 0;do {try {String startTimeStr LocalDateTime.now().format(DATE_TIME_FORMATTER);// 交给调用者写具体实现并把值返回出去result supplier.get();String endTimeStr LocalDateTime.now().format(DATE_TIME_FORMATTER);// 交给调用者写具体实现入参供调用者使用logFunc.log(result, startTimeStr, endTimeStr, retryTimes);} catch (Exception e) {e.printStackTrace();} finally {if (result ! null !((BasicResponseString) result).getCode().equals(HttpStatus.SC_OK)) {try {Thread.sleep(sleepMillis);} catch (InterruptedException e) {e.printStackTrace();}}retryTimes;}} while (((result null) || !((BasicResponseString) result).getCode().equals(HttpStatus.SC_OK)) retryTimes maxRetryTimes);return result;} }测试用例如下所示优化前有21行/代码见第3小节的代码其实如果不写注释不换行只需用1行就可以将这个重试机制调用起来了见下面的代码简洁多了 Slf4j public class HttpRetryUtilTest extends AppTest {Resourceprivate HttpRestTemplate restTemplate;Testpublic void testRetry(){BasicRequest basicRequest new BasicRequest();basicRequest.setMethodUrl(https://www.google.com);BasicResponseString resp HttpRetryUtil.retryOnException(// 实现supplier函数式接口() - restTemplate.getForString(basicRequest), // 实现LogFunc函数式接口(response, startTimeStr, endTimeStr, curTime) - log.info(HttpRetryUtil retryOnException, request:{}, response:{}, startTimeStr:{}, endTimeStr:{}, times:{}, JSON.toJSONString(basicRequest), JSON.toJSONString(response), startTimeStr, endTimeStr, curTime), 3, 500L);log.info(repsonse:{}, JSON.toJSONString(resp));} }5 进一步优化 针对那些重试次数、休眠时间可以在工具类中再定义一些默认的重试次数、默认的休眠时间然后利用Java的多态特性方法重载定义多种工具方法即可。
http://www.sadfv.cn/news/172327/

相关文章:

  • 台州网站seo外包黑龙江省城乡建设厅网站首页
  • 网站开发数据库问题网站简繁转换
  • 个人网站 备案 名称营销策略ppt模板
  • 苏中建设集团网站官网建设银行招聘官网网站
  • 手机建网站模板动漫制作好找工作吗
  • dw制作网站网页模板ps网站怎么做超链接
  • 河南住房城乡建设部网站企业门户网站建设方案书
  • 中小学教师兼职做网站网络营销平台有哪些
  • 小企业网站建设多少钱苏州知名高端网站建设机构
  • 做外贸面料的网站隆昌移动网站建设
  • 专业网站设计报价黄山旅游攻略ppt
  • 做红k线网站网站关键字怎么分割
  • 建设设计院网站做网站加盟
  • php网站建设视频教程重庆网站开发工资
  • 深圳专业集团网站建设蓝杉互动网站建设
  • 做网站算经商吗武进建设银行网站首页
  • 行业网站名录wordpress安装插件502
  • 专业手机网站建设价格网站广告图片在线制作
  • 网站开发公司 logowordpress 无刷新分页
  • 在静安正规的设计公司网站怎么给自己的网站做模版
  • 上虞网站建设公司高端网站设计百家号
  • 做好网站建设对企业有什么作用网站开发项目企划书
  • 常州网站建设培训wordpress播放本地视频
  • 西安企业网站建设公司手机网站织梦模板
  • 做网站公司长沙学平面设计哪个学校好
  • 网站跟软件有什么区别是什么图片网站seo
  • 建设局网站安全自查情况报告建设厅网站装修合同模板
  • wordpress怎么不出付费阅读企业网站seo模板
  • 郑州市网站建设哪家公司好谷歌网页版登录入口
  • 家用电器销售的网站开发网站页面优化怎么做