总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及
08月28日 00:28
总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及监控与报警等措施。这些措施可以有效地保护系统,避免因不可控因素导致的故障和不稳定。
虚拟号是一种基于互联网技术的电话号码服务。它通过将电话号码与用户的手机或其他通信设备绑定,实现了在不同设备上接听和拨打电话的便利,保护用户号码隐私,记录通话中内容及信息等,虚拟号的主要特点包括以下几个方面:
隐私保护:虚拟号可以作为一个中间号码,将用户的真实电话号码隐藏起来。当用户需要提供电话号码时,可以使用虚拟号码代替,从而保护个人隐私。灵活性:虚拟号可以根据用户的需求进行设置和调整。用户可以选择不同的地区号码,甚至可以选择国际号码,使得自己的电话号码更具灵活性和适应性。多功能性:虚拟号不仅可以用于接听和拨打电话,还可以提供一系列增值服务。例如,用户可以设置来电转接、语音信箱、短信转发等功能,满足不同的通信需求。企业应用:虚拟号在企业通信中有着广泛的应用。企业可以通过虚拟号为客户提供更好的服务体验,例如设置客服热线、呼叫中心等,提高客户满意度和业务效率。总之,虚拟号作为一种创新的电话号码服务,为用户提供了更加灵活、安全和便捷的通信方式。它在个人和企业通信中都有着广泛的应用场景。
(相关资料图)
在门店业务的场景下,需要店员/用户拨打号码进行售卖/购买等信息咨询,通过第三方服务提供的虚拟号的方式对双方手机号绑定,通过虚拟号来实现接听/拨打,有效解决了用户号码隐私保护的问题,以及帮助门店进行管理店员话术监控与管理数据分析等。
二手交易虚拟号绑定图
XB 模式:指可以将 B(店员手机号)与 X(虚拟号)进行绑定,后续用户直接拨打 X(虚拟号)都是由当前店员 B 手机号进行接听。
AXB 模式:指用户手机号 A 与店员手机号 B,同时绑定虚拟号码 X,后续 A 拨打 X号码,B 会看到 X 号码打过来;同理 B 拨打 X号码,A 会看到X 号码打过来。
呼叫流程图
与第三方进行交互的过程中,随着时间的推移,业务不断的发展,服务方与第三方的交互流程也会不断的改版。下面会说明历史版本与第三方交互中的一些问题。
图片
在最初的版本中,交互流程相对简单,只包含基本的绑定和解绑操作。在正常情况下,这种简单的交互是没有问题的。然而,在线上出现最多的情况就是超时、超时、还是超时,因为和第三方交互都是基于HTTP方式进行交互,对于第三方的响应时间是不可控的。一旦响应超过了APP的请求时间,就会熔断请求,导致请求失败。
为了保证服务的可靠性,在最新版本中做了以下优化措施:
图片
优化概念模型图
超时处理机制:提供一个查询绑定状态的接口,APP 不断轮询获取绑定状态。前置校验代码同步,将与第三方绑定/解绑接口进行异步化处理。//开启异步线程,执行重试方法,进行与第三方接口绑定。ThreadUtil.executor.submit(() -> { try { log.info("act=AppOperationHandler type=retryBindXb_retryBindAxb_start"); pstnRetryService.retryBindXb(appOpnParam); } catch (Exception e) { log.error("act=AppOperationHandler type=retryBindXb_retryBindAxb_fail", e);}});
并发处理机制:基于乐观锁的方式加锁实现避免并发问题。将绑定状态添加了一个操作中的中间态。NOT_BIND(1, "未绑定"), BIND(2, "已绑定"), OPERATION(3, "操作中");
异常处理机制:在绑定过程中,及时捕获并处理异常情况,例如调用第三方接口超时、服务端错误异常等等,通过重试方式来保证操作的完整性和一致性。重试基于注解AOP拦截,通过MQ消息的方式实现重试。@Override@ZZMQRetry(errorHandler = "onErrorMsgPcBindXb", firstSyncCall = true)public void retryBindXb(PstnBindParam pstnBindParam) { //调用第三方接口进行绑定 String bindId = bindVirtualNumber(pstnBindParam); Boolean executeResult = transactionTemplate.execute(status -> { try { //创建绑定记录 pstnBindRecordService.insertBindRecord(bindId, pstnBindParam); //状态流转至已绑定 return this.xbOpnStateToBind(pstnBindParam.getAssignVirtualNum()); } catch (Exception e) { status.setRollbackOnly(); return Boolean.FALSE; } }); if (Objects.isNull(executeResult) || !executeResult) { throw new BusinessException("修改状态异常进行重试"); } }
告警处理机制:在发生严重异常、或者重试到一定次数之后任然没有成功,发送告警进行通知。public void onErrorMsgPcBindXb(PstnBindParam param) { int retryCount = RetryContext.getRetryCount(); log.info("act=PcOperationHandler type=onErrorMsgPcBindXb retryCount={} ", retryCount); if (retryCount >= RETRY_MAX_NUM) { WxMsgUtil.sendMsg(GROUP, "绑定XB重试"+ retryCount + "次,仍未成功请排查,虚拟号:"+ param.getVirtualNum()); } }
通过以上优化措施,可以提高交互流程的稳定性和可靠性,减少业务方与服务方的异常、超时以及绑定状态不一致的情况,从而确保虚拟号的正常使用,提升系统的稳定性和店员使用体验。
axb绑定流程
以上优化后的店员拨打电话AXB绑定的流程,在与第三方交互绑定时,开启了一个新的线程进行处理任务,并且在这个线程中有出现错误或异常时就会重新回到线程入口重新执行。通过异步和循环查询状态的方式解决了与第三方交互耗时高的问题,有效提高了流程以及使用体验。同时,通过重试的方式保证了流程的一致性和完整性,避免了因网络波动或其他异常情况导致的状态数据不一致问题。此外,通过监控告警可以实时监控系统应用的运行状态,并在出现异常或故障时及时发出警报通知,帮助店员及时处理问题,提高整个流程的可靠性和稳定性。
这个流程只是业务中的其中一环,在线上使用还有更复杂的场景比如同时绑定xb、axb两个场景,怎么能保证都能成功、怎么能保证不超时、怎么能保证状态都一致?
确保流程成功、避免超时和保持状态一致,可以通过以下步骤来优化:
增加状态值:在库表中添加两个状态值,一个用于XB的绑定状态,另一个用于AXB的绑定状态。使用乐观锁:在业务检查完成后,以乐观锁的方式同时更新这两个状态值。创建线程:创建两个线程来处理XB和AXB的绑定流程,这样可以保证两个流程相互不影响。状态流转:在流程结束后,将这两个状态值流转至已绑定的状态。轮询接口:提供一个单独获取绑定状态的接口,供端轮询查询使用,优化店员使用体验。通过以上步骤,可以有效地优化流程,确保其成功、避免超时并保持状态一致。
在进行版本优化时,尽量保持入口不变,底层改变。这样可以使得灰度测试更加容易进行。通过保持入口不变,可以确保用户在升级版本时不会遇到任何新的障碍或问题。
/** * 是否为灰度虚拟号码 * * @param grayVirtualNumber * @return */ public boolean isGrayVirtualNumber(String grayVirtualNumber) { return flag || grayVirtualNumberList.contains(grayVirtualNumber); }
根据阿波罗配置,我们将某个城市的虚拟号码设置为线上灰度测试。其他虚拟号码仍将使用老版本的服务接口。在测试没有问题后,将直接开启全量即可。
我们对添加了@ZZMQRetry的函数增加了AOP拦截,请求将不会真正同步执行重试函数,而是发送一条MQ消息;同时会自动start一个消费组,消费函数为@ZZMQRetry函数。
图片
在与第三方服务的接口交互中,不可控因素是不可避免的。为了确保系统的稳定性和可靠性,重要的是采取预防措施。总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及监控与报警等措施。这些措施可以有效地保护系统,避免因不可控因素导致的故障和不稳定。
关于作者
徐鑫辉,转转门店技术部后端研发工程师
关键词:
总体来说,就是要设计并实施异常处理、超时设置、重试机制、断路器以及
08月28日 00:28
标题:微粒贷还款日没有收到扣钱通知-微粒贷还款日没有收到扣钱通知怎
08月28日 00:29
近日,在江西省南昌市举办的2023江西省锂产业大会暨第一届碳酸锂供需
08月28日 00:23
华声在线8月24日讯(文 视频全媒体记者卜岚实习生周绮芃)近日,省委办
08月28日 00:17
近日,菏泽市水文中心开展以“我们的节日·七夕”为主题的先进典型座谈
08月28日 00:24
抽逃出资股东的责任1、股东权利股东抽逃出资,公司根据公司章程或者股
08月28日 00:29
国创医药闯关创业板:收购的山东中泰去年已实现盈利,创业板,国创医药,
08月28日 00:15
1、朋友,但愿你是华丽流,加点保证这些:裂波斩+5强制,地裂波动剑+1
08月28日 00:23
男篮前景堪忧!塞尔维亚球星提到胡明轩,苏群爆出不利消息,苏群,篮球队
08月28日 00:22
污染大海定重钳出击,梦幻西游超级神柚特殊技能引人注目!,大海,神佑,
08月28日 00:17
20亿定增大扩产遭市场用脚投票,“RIO”母公司百润股份砸出跌停,募投,
08月28日 00:19
文 图 视频王茹诗徐如风刘洋姜开林文逸文晴空摇曳,纤云四卷。浮邱山下
08月28日 00:23
郑州市气象台2023年08月22日21时20分发布雷暴大风黄色预警信号:预计未
08月28日 00:23
,你们好,今天0471房产来聊聊一篇夏回族自治区商品交易市场管理条例,
08月28日 00:15
最近景和也是放出了主角团三人组拍摄一年了的前后对比照,我们一起来看
08月28日 00:24
宣布自营快递业务两个月,菜鸟集团旗下菜鸟速递正忙着“招兵买马”。按
08月28日 00:14
离婚房产分割分为以下情况:1、一方父母出资购房,产权登记在出资人子
08月28日 00:17
据国家统计局官网,今年以来,装备制造业发展动能积聚壮大,持续助推工
08月28日 00:08
《最终幻想16》官方近日宣布,将于9月3日对游戏进行最新版本的更新。此
08月28日 00:16
一边高喊促消费,一边限制银行卡交易,为何我们总是左手打右手?,限额,
08月28日 00:09
国家防总紧急提醒!沿海地区严加防范8月26日,国家防总办公室、应急管
08月28日 00:10
23日,6名电信诈骗犯罪嫌疑人,在缅甸仰光国际机场由缅甸警方移交给中
08月28日 00:19
1、engine词性及解释n 引擎,发动机,机车vt 安装发动机于【化】发动机【
08月28日 00:09
1、英镑,然后是欧元、美元、新元。2、(新加坡),但是现在很多国家的钱
08月28日 00:03
今天之间网超哥来为大家解答以上的问题。电脑打印图片怎么操作,如何在
08月28日 00:01
,你们好,今天0471房产来聊聊一篇取现金能力分析,取现金能力分析简述
08月28日 00:09
做人嘛,最重要的是开心。可年纪越大,越难开心,因为生活需要负重前行
08月28日 00:02
近日,B站UP主“tekkenman铁拳男”在德国科隆游戏展现场,对刚试玩完《
08月28日 00:12
贝塞斯达的全新IP《星空》在过去的25年中首次亮相,无疑已经成为了玩家
08月27日 23:57
成都市温江区水务局官方微博@水韵温江8月26日发布情况通报称,关于近日
08月28日 00:10