最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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 攔截器、截止、取消的評論 (共 條)

分享到微博請遵守國家法律
禹城市| 高安市| 岑巩县| 齐齐哈尔市| 遵义县| 塔城市| 邢台市| 溧水县| 浦江县| 清丰县| 尉氏县| 弋阳县| 西峡县| 莱芜市| 安溪县| 丹东市| 新丰县| 西平县| 石城县| 洮南市| 望都县| 彭阳县| 海晏县| 浦县| 武城县| 崇阳县| 新兴县| 抚州市| 德化县| 郯城县| 建阳市| 土默特右旗| 昭苏县| 南木林县| 东辽县| 乌什县| 夏邑县| 西乡县| 滨海县| 内丘县| 宁德市|