欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

架構(gòu)設(shè)計之異步請求怎么同步處理

這篇文章主要講解了“架構(gòu)設(shè)計之異步請求怎么同步處理”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“架構(gòu)設(shè)計之異步請求怎么同步處理”吧!

成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務商,為中小企業(yè)提供網(wǎng)站設(shè)計、做網(wǎng)站服務,網(wǎng)站設(shè)計,網(wǎng)站改版維護等一站式綜合服務型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出成都創(chuàng)新互聯(lián)

全文摘要

  • 異步給現(xiàn)有架構(gòu)帶來的問題

  • Dubbo 異步轉(zhuǎn)同步解決方法

  • 異步轉(zhuǎn)同步架構(gòu)設(shè)計方案

0x00. 前言

現(xiàn)有一個系統(tǒng),整體架構(gòu)如下所示:

架構(gòu)設(shè)計之異步請求怎么同步處理

這是一個很常見的同步設(shè)計方案,上游系統(tǒng)需要等待下游系統(tǒng)接口返回調(diào)用結(jié)果。

現(xiàn)在需要接入另外一個第三方服務 B,該服務與服務 A 最大區(qū)別在于,這是一個異步 API。調(diào)用之后,僅僅返回受理成功,處理結(jié)果后續(xù)通過異步通知返回。

接入之后,整體架構(gòu)如下所示:

架構(gòu)設(shè)計之異步請求怎么同步處理

默認情況下,Dubbo 支持同步調(diào)用方式,這里將會創(chuàng)建 DefaultFuture 對象。

架構(gòu)設(shè)計之異步請求怎么同步處理

業(yè)務線程調(diào)用 DefaultFuture#get方法進入阻塞。這段代碼比較簡單,通過調(diào)用 Condition#await 阻塞線層。

架構(gòu)設(shè)計之異步請求怎么同步處理

架構(gòu)設(shè)計之異步請求怎么同步處理

0x02. 轉(zhuǎn)發(fā)方案設(shè)計

根據(jù) Dubbo 解決思路,問題 1 解決辦法就比較簡單了。具體流程如下:

  1. 通信服務 B 內(nèi)部生成一個唯一請求 ID ,發(fā)給第三方服務

  2. 若請求成功,內(nèi)部版使用 Map 存儲對應關(guān)系,并使業(yè)務線程阻塞等待

  3. 通信服務 B 收到異步通知結(jié)果,通過 ID 查找對應業(yè)務線程,喚醒的相應的線程

這個設(shè)計過程需要注意設(shè)置合理的超時時間,這個超時時間需要考慮遠程服務調(diào)用耗時,可以參考如下公式:

業(yè)務線程等待時間=通信服務 B 接口的超時時間 - 調(diào)用第三方服務 B 接口消耗時間

這里就不貼出具體的代碼,詳細代碼參考 Dubbo DefaultFuture

接下來重點看下通知服務如何將結(jié)果轉(zhuǎn)發(fā)給正確的通信服務 B 的節(jié)點。這里想到兩種方案:

  1. SocketServer 方案

  2. MQ 方案

2.1 SocketServer

通信服務 B 使用 SocketServer 構(gòu)建一個服務接收程序,當通知接收程序收到第三方服務 B 通知時,通過 Socket 將結(jié)果轉(zhuǎn)發(fā)給通信服務 B。

整個系統(tǒng)架構(gòu)如下所示:

架構(gòu)設(shè)計之異步請求怎么同步處理

通知接收程序收到異步通知之后,直接將結(jié)果發(fā)送到 MQ

通信服務 B 開啟廣播消費模式,拉取 MQ 消息。

通信服務 B_1 拉取消息,通過請求 ID 映射關(guān)系,沒找到內(nèi)部等待的線程,知道這不是自己的等待消息,于是 B_1 直接丟棄即可。

通信服務 B_2 拉取消息,通過請求 ID 映射關(guān)系,順利找到正在等待的線程,然后可以喚醒等待線程,返回最后的結(jié)果。

對比 SocketServer 方案,MQ 方案整體流程比較簡單,編程難度低,也沒用存在特殊的配置。

不過這個方案十分依賴 MQ 消息實時性,若 MQ 消息投遞延遲很高,這就會導致通信服務 B 業(yè)務線程超時蘇醒,業(yè)務異常返回。

這里我們選擇使用 RocketMQ,長輪詢 Pull 方式,可保證消息非常實時,

感謝各位的閱讀,以上就是“架構(gòu)設(shè)計之異步請求怎么同步處理”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對架構(gòu)設(shè)計之異步請求怎么同步處理這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

新聞標題:架構(gòu)設(shè)計之異步請求怎么同步處理
網(wǎng)頁地址:http://chinadenli.net/article8/pgjiip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作服務器托管網(wǎng)站設(shè)計App設(shè)計網(wǎng)站收錄企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司