虛擬號在轉轉實踐與應用
總體來說,就是要設計并實施異常處理、超時設置、重試機制、斷路器以及監(jiān)控與報警等措施。這些措施可以有效地保護系統(tǒng),避免因不可控因素導致的故障和不穩(wěn)定。
(資料圖片)
1.介紹
虛擬號是一種基于互聯(lián)網技術的電話號碼服務。它通過將電話號碼與用戶的手機或其他通信設備綁定,實現了在不同設備上接聽和撥打電話的便利,保護用戶號碼隱私,記錄通話中內容及信息等,虛擬號的主要特點包括以下幾個方面:
隱私保護:虛擬號可以作為一個中間號碼,將用戶的真實電話號碼隱藏起來。當用戶需要提供電話號碼時,可以使用虛擬號碼代替,從而保護個人隱私。靈活性:虛擬號可以根據用戶的需求進行設置和調整。用戶可以選擇不同的地區(qū)號碼,甚至可以選擇國際號碼,使得自己的電話號碼更具靈活性和適應性。多功能性:虛擬號不僅可以用于接聽和撥打電話,還可以提供一系列增值服務。例如,用戶可以設置來電轉接、語音信箱、短信轉發(fā)等功能,滿足不同的通信需求。企業(yè)應用:虛擬號在企業(yè)通信中有著廣泛的應用。企業(yè)可以通過虛擬號為客戶提供更好的服務體驗,例如設置客服熱線、呼叫中心等,提高客戶滿意度和業(yè)務效率。總之,虛擬號作為一種創(chuàng)新的電話號碼服務,為用戶提供了更加靈活、安全和便捷的通信方式。它在個人和企業(yè)通信中都有著廣泛的應用場景。
2.實踐與應用
在門店業(yè)務的場景下,需要店員/用戶撥打號碼進行售賣/購買等信息咨詢,通過第三方服務提供的虛擬號的方式對雙方手機號綁定,通過虛擬號來實現接聽/撥打,有效解決了用戶號碼隱私保護的問題,以及幫助門店進行管理店員話術監(jiān)控與管理數據分析等。
二手交易虛擬號綁定圖
2.1 名稱解釋
A:用戶手機號X:虛擬號/中間戶B:店員手機號第三方:虛擬號提供服務方運營商:電信、聯(lián)通、移動各大平臺2.2 虛擬號的 XB 模式
XB 模式:指可以將 B(店員手機號)與 X(虛擬號)進行綁定,后續(xù)用戶直接撥打 X(虛擬號)都是由當前店員 B 手機號進行接聽。
2.3 虛擬號的 AXB 模式
AXB 模式:指用戶手機號 A 與店員手機號 B,同時綁定虛擬號碼 X,后續(xù) A 撥打 X號碼,B 會看到 X 號碼打過來;同理 B 撥打 X號碼,A 會看到X 號碼打過來。
2.4 虛擬號呼叫流程圖
呼叫流程圖
3. 與第三方交互的版本演進
與第三方進行交互的過程中,隨著時間的推移,業(yè)務不斷的發(fā)展,服務方與第三方的交互流程也會不斷的改版。下面會說明歷史版本與第三方交互中的一些問題。
3.1 初始版本綁定流程
圖片
在最初的版本中,交互流程相對簡單,只包含基本的綁定和解綁操作。在正常情況下,這種簡單的交互是沒有問題的。然而,在線上出現最多的情況就是超時、超時、還是超時,因為和第三方交互都是基于HTTP方式進行交互,對于第三方的響應時間是不可控的。一旦響應超過了APP的請求時間,就會熔斷請求,導致請求失敗。
3.2 最新版本交互流程
為了保證服務的可靠性,在最新版本中做了以下優(yōu)化措施:
圖片
優(yōu)化概念模型圖
超時處理機制:提供一個查詢綁定狀態(tài)的接口,APP 不斷輪詢獲取綁定狀態(tài)。前置校驗代碼同步,將與第三方綁定/解綁接口進行異步化處理。//開啟異步線程,執(zhí)行重試方法,進行與第三方接口綁定。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);}});
并發(fā)處理機制:基于樂觀鎖的方式加鎖實現避免并發(fā)問題。將綁定狀態(tài)添加了一個操作中的中間態(tài)。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 { //創(chuàng)建綁定記錄 pstnBindRecordService.insertBindRecord(bindId, pstnBindParam); //狀態(tài)流轉至已綁定 return this.xbOpnStateToBind(pstnBindParam.getAssignVirtualNum()); } catch (Exception e) { status.setRollbackOnly(); return Boolean.FALSE; } }); if (Objects.isNull(executeResult) || !executeResult) { throw new BusinessException("修改狀態(tài)異常進行重試"); } }
告警處理機制:在發(fā)生嚴重異常、或者重試到一定次數之后任然沒有成功,發(fā)送告警進行通知。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()); } }
通過以上優(yōu)化措施,可以提高交互流程的穩(wěn)定性和可靠性,減少業(yè)務方與服務方的異常、超時以及綁定狀態(tài)不一致的情況,從而確保虛擬號的正常使用,提升系統(tǒng)的穩(wěn)定性和店員使用體驗。
axb綁定流程
以上優(yōu)化后的店員撥打電話AXB綁定的流程,在與第三方交互綁定時,開啟了一個新的線程進行處理任務,并且在這個線程中有出現錯誤或異常時就會重新回到線程入口重新執(zhí)行。通過異步和循環(huán)查詢狀態(tài)的方式解決了與第三方交互耗時高的問題,有效提高了流程以及使用體驗。同時,通過重試的方式保證了流程的一致性和完整性,避免了因網絡波動或其他異常情況導致的狀態(tài)數據不一致問題。此外,通過監(jiān)控告警可以實時監(jiān)控系統(tǒng)應用的運行狀態(tài),并在出現異?;蚬收蠒r及時發(fā)出警報通知,幫助店員及時處理問題,提高整個流程的可靠性和穩(wěn)定性。
這個流程只是業(yè)務中的其中一環(huán),在線上使用還有更復雜的場景比如同時綁定xb、axb兩個場景,怎么能保證都能成功、怎么能保證不超時、怎么能保證狀態(tài)都一致?
確保流程成功、避免超時和保持狀態(tài)一致,可以通過以下步驟來優(yōu)化:
增加狀態(tài)值:在庫表中添加兩個狀態(tài)值,一個用于XB的綁定狀態(tài),另一個用于AXB的綁定狀態(tài)。使用樂觀鎖:在業(yè)務檢查完成后,以樂觀鎖的方式同時更新這兩個狀態(tài)值。創(chuàng)建線程:創(chuàng)建兩個線程來處理XB和AXB的綁定流程,這樣可以保證兩個流程相互不影響。狀態(tài)流轉:在流程結束后,將這兩個狀態(tài)值流轉至已綁定的狀態(tài)。輪詢接口:提供一個單獨獲取綁定狀態(tài)的接口,供端輪詢查詢使用,優(yōu)化店員使用體驗。通過以上步驟,可以有效地優(yōu)化流程,確保其成功、避免超時并保持狀態(tài)一致。
4.上線方案
在進行版本優(yōu)化時,盡量保持入口不變,底層改變。這樣可以使得灰度測試更加容易進行。通過保持入口不變,可以確保用戶在升級版本時不會遇到任何新的障礙或問題。
/** * 是否為灰度虛擬號碼 * * @param grayVirtualNumber * @return */ public boolean isGrayVirtualNumber(String grayVirtualNumber) { return flag || grayVirtualNumberList.contains(grayVirtualNumber); }
根據阿波羅配置,我們將某個城市的虛擬號碼設置為線上灰度測試。其他虛擬號碼仍將使用老版本的服務接口。在測試沒有問題后,將直接開啟全量即可。
5.重試組件
我們對添加了@ZZMQRetry的函數增加了AOP攔截,請求將不會真正同步執(zhí)行重試函數,而是發(fā)送一條MQ消息;同時會自動start一個消費組,消費函數為@ZZMQRetry函數。
圖片
6.總結
在與第三方服務的接口交互中,不可控因素是不可避免的。為了確保系統(tǒng)的穩(wěn)定性和可靠性,重要的是采取預防措施。總體來說,就是要設計并實施異常處理、超時設置、重試機制、斷路器以及監(jiān)控與報警等措施。這些措施可以有效地保護系統(tǒng),避免因不可控因素導致的故障和不穩(wěn)定。
關于作者
徐鑫輝,轉轉門店技術部后端研發(fā)工程師
關鍵詞:
您可能也感興趣:
為您推薦
敘俄軍隊聯(lián)手打擊,目標是
賽微電子:接受華安證券等機構調研
北京:9月1日起二環(huán)主路全線取消公交專用道
排行
- 今日建龍集團張偉祥和張志祥(建龍老總張志祥是什么背景)
- 成都市行政區(qū)域內租房提取住房公積金將執(zhí)行新政
- 創(chuàng)新政策支持不斷 大量租賃房源逐步入市
- 住房公積金各項業(yè)務運行總體平穩(wěn) 資金總體安全
- 【環(huán)球播資訊】領智金融(08163.HK)完成發(fā)行9100萬港元的可換股債券
- 中國石化兩天市值蒸發(fā)681億 子公司交易損失云遮霧罩
- 因事故隱患突出,河南100家道路運輸企業(yè)被約談
- 鄢陵縣精城建材有限公司不執(zhí)行重污染天氣管控措施違規(guī)生產
- 工商銀行:通過“環(huán)球撮合薈”助力海南自貿港貿易投資對接
- 第十九批河南省示范幼兒園名單公布 新批20所16所被摘牌
最近更新
- 虛擬號在轉轉實踐與應用
- 成都出讓15宗宅地成交金額95億元,2宗地塊觸頂搖號
- 19.6億起五塊地,新城市場迎來年度最大規(guī)模土拍!
- 張良點金:晚間原油現價80.26多!
- “中東”土豪,難救恒大汽車
- mg25805加墨(mg2580s墨盒加墨)
- 王傳福 投了“天才少年”
- 制造業(yè)服務業(yè)均萎縮 歐洲經濟下行風險加大
- 《中國財富管理能力評價報告(2023上)》發(fā)布:我國財富管理...
- 1批次“明君泉”包裝飲用水檢出銅綠假單胞菌
- 鋰電新能源產業(yè)發(fā)展迎來大機遇
- 到2025年,長株潭地區(qū)生產總值或將突破2.5萬億元
- 牛肉丸怎么單獨炒好吃
- 游客突發(fā)心臟“交感電風暴”,多方接力展開生死急救
- 濟南103歲老人骨折入院手術 成為國內骨科機器人手術年齡最大...
- 大連4.6級地震 親歷網友熱議:市民稱震感強烈晃到頭暈 鼠標...
- 首批澳門輸內地肉制品經港珠澳大橋順利通關
- 7只股票型ETF成交量超1000萬手 華夏上證科創(chuàng)板50成份ETF成交3646.98萬手
- 機動車年檢新規(guī)2020年新規(guī)定 車輛年檢最新規(guī)2020年新規(guī)定
- 中文翻譯韓文轉換器(韓文翻譯器在線轉換器)
- 今日建龍集團張偉祥和張志祥(建龍老總張志祥是什么背景)
- 投資參股盛行 農商行緣何頻頻入手同業(yè)股權
- 聽我說,夏天裙子一定要“肥一點”,慵懶舒適還顯瘦,別提多美了
- 美國黑人男子被警察從背后槍殺 當地社區(qū)呼吁展開獨立調查
- [快訊]成科機電公布2023年半年度分紅方案預案
- 珠海一樓盤5折售賣?珠海住建局:不屬實
- 富家公子電視劇韓劇 富家公子
- 美媒:政府救災不力 夏威夷州居民寒心
- 新一輪棚改,輪到廣州了?