五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

最簡單的 gRPC 教程—3 攔截器、截止、取消

2021-04-16 16:21 作者:roseduanV  | 我要投稿

前面的兩篇文章已經(jīng)基本講述了 gRPC 的使用方法,相信已經(jīng)能夠應(yīng)對大多數(shù)開發(fā)場景了,只不過我們有時候需要針對業(yè)務(wù)作出一些定制,這時候就必須要更加了解 gRPC 的一些特性了,比如:

  • 攔截器

  • 截止時間

  • 取消

攔截器

我把前一篇文章的訂單 Order 服務(wù)的代碼文件拷貝了一份,用來演示這一節(jié)的內(nèi)容。

gRPC 在服務(wù)端和客戶端均可以實現(xiàn)攔截器,首先來看一下服務(wù)端的攔截器。

服務(wù)端攔截器

針對一元通信模式,有對應(yīng)的一元攔截器,攔截器的方法定義如下:

然后需要在服務(wù)端的 main 方法中注冊一下這個攔截器:

實現(xiàn)完成之后,所有服務(wù)端的一元通信模式的方法,都會被這個方法所攔截。

針對服務(wù)端流模式,也有對應(yīng)的流攔截器,方法的定義稍微有一些區(qū)別了。

在接收和發(fā)送消息時,都可以進行攔截,這樣可以根據(jù)業(yè)務(wù)所需定制化。

在服務(wù)端的 main 方法中,還是需要注冊一下這個攔截器:

客戶端攔截器

和服務(wù)端類似,客戶端攔截器也分為了一元攔截器和流攔截器,分別對應(yīng)不同的通信模式。

首先來看看一元攔截器。

然后也需要在監(jiān)聽服務(wù)端的時候注冊攔截器:

然后再來看下客戶端流攔截器,先看下攔截器方法定義:

最后也需要在客戶端的 main 方法中注冊攔截器:

截止時間

再來看一下另一個常用的模式截止時間,gRPC 常用于微服務(wù)之間的通信,而微服務(wù)中,服務(wù)之間的調(diào)用往往存在不確定性,比如網(wǎng)絡(luò)環(huán)境差,數(shù)據(jù)聚合量太大等等,都有可能會導(dǎo)致服務(wù)調(diào)用者長時間等待響應(yīng)結(jié)果。

這樣對于用戶體驗來說非常的不好,并且也很浪費資源,所以微服務(wù)之間需要采用快速失敗的模式,及時釋放資源,不堆積請求,這樣對系統(tǒng)的壓力也會更小。

在 Go 語言中,對 gRPC 截止時間的控制,主要是使用 context 來實現(xiàn)的。下面是一個簡單的 demo:

這里使用了帶有截止時間的 context,如果?AddOrder?方法的調(diào)用超過了截止時間,那么調(diào)用就會被取消。

取消

在某些情況下,我們可能需要取消 RPC 請求,這和設(shè)置截止時間有些類似,都是為了避免請求掛起讓客戶端一直等待,在 Go 語言中,取消的操作仍然借助于 context 來實現(xiàn)。

以一個簡單的例子來說明取消 RPC 的操作:

如果對你有幫助的話,記得點個贊再走哦!

demo 示例代碼放到了我的 GitHub 上:github.com/roseduan/grpc-demo


最簡單的 gRPC 教程—3 攔截器、截止、取消的評論 (共 條)

分享到微博請遵守國家法律
霍城县| 哈密市| 杨浦区| 当涂县| 涪陵区| 荆州市| 松桃| 乌鲁木齐市| 沐川县| 绥阳县| 自治县| 巫溪县| 高邑县| 天台县| 安远县| 随州市| 崇明县| 义乌市| 凤山县| 富锦市| 曲靖市| 信丰县| 广昌县| 枞阳县| 建湖县| 萝北县| 灌南县| 涞水县| 德庆县| 大港区| 鹿邑县| 新余市| 新绛县| 古蔺县| 荣昌县| 旺苍县| 昭平县| 电白县| 普宁市| 阿克陶县| 兴山县|