内容简介:之前為了幫公司的產品加上一個中間層的服務處理,需要把許多原先預設的 GRPC 服務參數都改掉,或是新增不少功能.在這裡整理一下,分享給大家.本文會提供一個簡單的 repo 裡面有提到會使用到的一些功能,並且附上一個 Kubernetes 部署的 yaml 檔.
前提
之前為了幫公司的產品加上一個中間層的服務處理,需要把許多原先預設的 GRPC 服務參數都改掉,或是新增不少功能.在這裡整理一下,分享給大家.
本文會提供一個簡單的 repo 裡面有提到會使用到的一些功能,並且附上一個 Kubernetes 部署的 yaml 檔.
Show Me The Code
不囉唆,先看 REPO https://github.com/kkdai/grpc-example
在原先的 GRPC 服務開始擴展
一開始,我們先以 Hello World 為範例,並且省略相關的部分. 一開始 SayHello 的範例建置好之後. 這個 範例(hello world) 相當簡單,就是一個 SayHello 然後傳回一個回覆. 我們可能會開始收到其他的需求…
以下的需求最後將整合到一個範例 repo https://github.com/kkdai/grpc-example
1: 能不能一次送多個指令 (streaming request)
你可能收到需求,需要在原先的服務上面新增一個接口可以處理連續性的請求 (streaming request) .或是在處理資料的時候不要一次都處理完才回復,而是處理完其中一個部分請求就先回傳 (streaming response).
這是一個相當範例,可以看到 SayStreamHello 並沒有增加新的資料欄位.而是沿用舊的資料欄位
rpc SayHelloStreamServer (HelloRequest) returns (stream HelloReply) {}
在 proto buffer 裡面其實要改得很少,但是處理方式就不太依樣.以下開始放相關的處理代碼.
首先看 Streaming Server 的 server 端的部分
這邊稍微解釋一下,由於你將回傳的資料改成了 streaming 的結果.所以你必須要將資料一筆一筆的傳回去. 這段範例中,我加上了兩秒的 sleep 讓 streaming 更有感覺.
再來看 Streaming Server 的 client 端的部分
由於資料都是由 stream.Recv() 取出來,所以你需要做檢查是否資料傳完了沒.這裡是透過 err == io.EOF 來檢查.
2. 如何控制 GRPC service 的連線時間?
接下來能夠連續傳送資料之後,再來就是你會希望能夠讓你的 GRPC call 能夠更久一點.那麼你就會需要去修改你的連線方式.
這段程式碼裡面,可以看到 20*time.Second 就是我們連線的時間限制.你可以延長這個時間來達到增加呼叫時間,當然你也可以換個方式透過這個方式來控制你的時間限制.
3. 能不能大量的資料?
既然你的 GRPC 服務已經可以傳送大量的資料,那麼接下來就會有另外的需求: 能不能傳送相當大量的資料呢? 這裡定義的大量資料可能是超過 5MB 以上,因為 GRPC 預設的大小限制為 4 MB ( source code )
defaultServerMaxReceiveMessageSize = 1024 * 1024 * 4
那如果要修改的話,就依照以下的方式來修改.
這一段是要改成 server 將傳送的大小限制從 4MB 改到 8MB ,因為傳送資料是在 client –> server 這邊做第一次的控管,所以是由 server 來決定最多能傳送多大的資料.當然如果你希望 server 回傳資料可以傳大量的資料,就反過來要改在 client
當然,如果你想改 python 的 grpc server ,可以參考一下方式:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 几个 Go 系统可能遇到的锁问题
- golang中json反序列化可能遇到的问题
- 钱花了,事没办:传统企业在AI转型中可能遇到的坑
- 框架设计篇之7-进一步实现POM及可能遇到问题解决办法(1)
- 遇到的加密算法
- 静态库遇到静态库
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Nature of Code
Daniel Shiffman / The Nature of Code / 2012-12-13 / GBP 19.95
How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital w......一起来看看 《The Nature of Code》 这本书的介绍吧!