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

现在在市场上做网站怎么样软件设计师怎么考

现在在市场上做网站怎么样,软件设计师怎么考,网站建设销售兼职合同,旅游网站网页设计一、什么是幂等性 数学中的幂等是指f(x) f(f(x))#xff0c;编程领域的术语是指同一个操作#xff0c;在重复提交的情况下#xff0c;最终产生的影响是不变的。举例说#xff1a; 提交订单时#xff0c;用户在购物车界面#xff0c;重复点击“下单”#xff0c;服务端…一、什么是幂等性 数学中的幂等是指f(x) f(f(x))编程领域的术语是指同一个操作在重复提交的情况下最终产生的影响是不变的。举例说 提交订单时用户在购物车界面重复点击“下单”服务端有且只会创建一个订单。客户端在做交互设计的时候用户点击了“下单”就不能再次点击立马把按钮置灰。但是这里会有网络的重试或者弱网等异常导致服务端可能接收到两次http请求。如果服务端没有对http接口做幂等那么可能会生成两个重复的订单用户支付完成后第三方支付会回调服务端的支付回调接口服务端然后更新支付订单的状态最后回调通知其他系统比如订单系统和积分系统。这里的幂等性是指无论被回调多少次不会重复更新支付订单的状态和回调通知其他系统。 总结 对于重要的接口在实现接口时一定要考虑是否具备幂等性。 既然不是所有的接口那都有哪些场景的接口会需要考虑幂等性呢 二、哪些场景需要实现幂等 1、异步回调 比如上文说的支付回调接口也包括在其他的异步操作下的对外接口。 你都必须考虑是否支持幂等。 举个例子课程服务调用课堂服务的批量创建课堂接口由于后者是异步的操作所以待创建完成课堂服务将要回调通知课程服务。 于是课程服务需要开放一个接口出来此接口就必须支持幂等。 2、消息队列 有些业务需要削峰填谷会先把异步操作的消息给到Mq然后在监听方法中消费该mq消息。这里举一个异步复制某文件夹及其下的所有文件为例。 3、网络重试 当出现网络超时需要重试的时候你的接口是否支持幂等呢 比如openfeign就很好地支持retry机制。 三、哪些是天然幂等的 在进一步阐述如何实现幂等前我们有必要搞清楚哪些是天然幂等的。 都说自己每天写的代码都是CRUD我们现在就来分析下它们是否幂等。 查询方法都说查询的实现往往是最复杂的代码幸好它就是幂等的。虽然你前后的查询返回结果可能不一样然而并不会影响服务端的分毫。 基于版本号或者状态机的更新操作具体到sql语句有两种写法见下 # 不建议的写法 update PayTrade t set t.status :newStatus, t.outTradeNo :outTradeNo, t.payOkDate :payOkDate where t.channelTradeNo :channelTradeNo# 建议你这么写 update PayTrade t set t.status :newStatus, t.outTradeNo :outTradeNo, t.payOkDate :payOkDate where t.channelTradeNo :channelTradeNo and t.status :oldStatus他们的区别就是是否要求前一个状态后面的sql多了一个“ t.status :oldStatus ” 我们说它就是一个幂等操作而上面的写法则不建议它不是幂等的。 这里举例了基于状态机的更新基于版本号的类似就不一一赘述了。 最后说一说CRUD的删除操作D它也是天然幂等的。因为删除了的数据第二次想要再删除而不得了。 大多数的新增操作都需要最引起你的重视极其容易导致重复操作。 四、设计思路 1、请求唯一标识 可以是一个随机值token也可以是业务上的一个字段。 前者是客户端根据约定生成的一个值这个一般使用userId时间戳后者则是业务上的唯一值比如订单号、课程编号等。 那么随机token可不可以由服务端来颁发给客户端呢 也行原本一个接口就能完成的拆分成了两个接口。增加了一个颁发token的接口 下文将详细说明如果使用分布式锁实现接口的幂等。 2、每次操作前先查询 订单服务接收支付服务的支付回调先根据订单号查询订单详情如果数据库返回支付流水号和回调接口中的入参支付流水号相同则忽略该回调不做任何后续操作。 下面展示一下其简略代码 final Order order orderRepository.findByNo(orderPaymentMarkRequest.getOrderNo());// 如果流水号一样认为曾经标记支付成功保持幂等 if (!StringUtils.equals(order.getPayNo(), orderPaymentMarkRequest.getPayNo())) {// 业务处理更新订单等等 }public class OrderPaymentMarkRequest {ApiModelProperty(notes 订单号)private String orderNo;ApiModelProperty(notes 平台支付流水号)private String payNo; }3、使用乐观锁实现 引入状态机或者版本号等机制前文已有举例这里不再重复。 五、分布式锁实现幂等 代码示例 Lock(name CourseCenter, key createLecture:token: #request.token)Transactional(rollbackFor Throwable.class)public ApiResult createLecture(LectureCreateRequest request) {if (log.isInfoEnabled()) {log.info(创建讲次入参是{}, JsonUtils.toJsonString(request));}// 其他操作} }这里使用了自定义注解封装分布式锁所以代码本身比较简单。 鉴于篇幅具体实现分布式锁网上也比较多的实现方案。 本文就不具体展开论述了。
http://www.pierceye.com/news/199002/

相关文章:

  • 做网站后台需要写代码吗益阳seo网站建设
  • 小程序网站做多大尺寸辽阳住房和城乡建设网站
  • 昆山app网站制作网站的管理权限有什么用
  • 购物网站建设开题报告企业宣传方案模板
  • cdr做好排班怎么做网站我的免费网是个什么网站
  • 如何做别人网站镜像地区性中介类网站建设
  • 做的网站怎么查看点击率安装wordpress主题失败
  • 网站历史权重查询免费的黄冈网站有哪些下载软件
  • 宝安三网合一网站建设河北智能网站建设平台
  • 在百度上做网站有用吗wordpress环境虚拟机安装
  • 怎么做网站图片链接中元建设网站
  • 邢台做网站优化价格网站基本维护
  • 网站集群建设价格wordpress 加文章列表
  • 官方网站案例用ps做网站主页
  • 做名片的网站推广型网站建设销售
  • 河南省建设执业资格注册中心网站网站推广公司 sit
  • 来年做那个网站致富网站工作室 需要什么手续
  • 宜兴网站建设哪家好网站建设设计公司排名
  • 婚庆公司网站怎么做wordpress 首页置顶
  • 电商网站开发人员结构江苏住房和城乡建设厅网站首页
  • 快速建站的模板陕西省建设网三类人员继续教育
  • 谷歌浏览器对做网站有什么好处广州最好网站策划
  • 西安北郊做网站重庆手机软件开发
  • 怀化刚刚发生的大事台州seo服务
  • 织梦做的网站打开空白巴中网站制作公司
  • 如何使用jq做弹幕网站设计漂亮的网站
  • 电商网站是获取流量广西南宁网站排名优化
  • 网站板块设计有哪些开发网站监控推荐
  • 江西建设局网站广东网站建设类公司
  • 深圳网站制作设计艾佳工业设计