GRPC的四種服務型別

2021-08-15 10:12:13 字數 3568 閱讀 7926

上次簡單介紹了grpc的使用方法,並建立了乙個方法呼叫,在grpc中有四種服務型別,下面分別進行介紹

這就是一般的rpc呼叫,乙個請求物件對應乙個返回物件

proto語法:

rpc ******hello

(person)

returns

(result)

{}service**

@override

public

void

******hello

(protoobj.person request,

io.grpc.stub.streamobserverresponseobserver)

client**

@test

public

void

******

()throws interruptedexception

輸出---****** rpc---

hello, world

乙個請求物件,服務端可以傳回多個結果物件

proto語法

rpc serverstreamhello(person) returns (stream result) {}

service**

@override

public

void

serverstreamhello(protoobj.person request,

io.grpc.stub.streamobserverresponseobserver)

client**

@test

public

void

serverstream()

channel.shutdown();}輸出

---server stream rpc---

string: "hello, world"

string: "hello2, world"

string: "hello3, world"

客戶端傳入多個請求物件,服務端返回乙個響應結果

proto語法

rpc clientstreamhello

(stream person)

returns

(result)

{}service**

@override

public io.grpc.stub.streamobserverclientstreamhello(

final io.grpc.stub.streamobserverresponseobserver)

@override

public

void

onerror

(throwable t)

@override

public

void

oncompleted

() };

}client**

@test

public

void

clientstream

()throws interruptedexception

@override

public

void

onerror

(throwable t)

@override

public

void

oncompleted

() };

streamobserverclientstreamobserver = asyncstub.clientstreamhello(responseobserver);

clientstreamobserver.onnext(protoobj.person.newbuilder().setmyname("world").build());

clientstreamobserver.onnext(protoobj.person.newbuilder().setmyname("world2").build());

clientstreamobserver.oncompleted();

//由於是非同步獲得結果,所以sleep一秒

thread.sleep(1000);}輸出

---client stream rpc---

client stream--hello,world,world2

結合客戶端流式rpc和服務端流式rpc,可以傳入多個物件,返回多個響應物件

proto語法

rpc bistreamhello

(stream person)

returns

(stream result)

{}service**

@override

public io.grpc.stub.streamobserverbistreamhello(

final io.grpc.stub.streamobserverresponseobserver)

@override

public

void

onerror

(throwable t)

@override

public

void

oncompleted

() };

}client**

@test

public

void

bidirectstream

()throws interruptedexception

@override

public

void

onerror

(throwable t)

@override

public

void

oncompleted

() };

streamobserverbistreamobserver=asyncstub.bistreamhello(responseobserver);

bistreamobserver.onnext(protoobj.person.newbuilder().setmyname("world").build());

bistreamobserver.onnext(protoobj.person.newbuilder().setmyname("world2").build());

bistreamobserver.oncompleted();

//由於是非同步獲得結果,所以sleep一秒

thread.sleep(1000);}輸出

---bidirectional stream rpc---

bidirectional stream--hello2, world

bidirectional stream--hello3, world

bidirectional stream--hello2, world2

bidirectional stream--hello3, world2

grpc通過使用流式的方式,返回/接受多個例項可以用於類似不定長陣列的入參和出參

gRPC的四種呼叫方式

普通rpc呼叫,客戶端帶乙個請求物件進行呼叫,服務端返回乙個響應物件。syntax proto3 option csharp namespace grpcdemoservices package greet the greeting service definition.service greete...

四種容器型別

容器 collection 變數 值 一般程式語言都會設計儲存多個值的儲存方式 類似於c語言裡的陣列 容器分為四種型別 list 列表 鍊錶的實現 將幾塊不連續的記憶體聯絡起來 set 集合 tuple 元組 dict 字典 1.列表 list 是一種鍊錶的實現。列表的定義 可以儲存任意型別,不止數...

四種引用型別

在 j a 中最常見的就是強引用,把乙個物件賦給乙個引用變數,這個引用變數就是乙個強引用。當乙個物件被強引用變數引用時,它處於可達狀態,它是不可能被垃圾 機制 的,即使該物件以後永遠都不會被用到 jvm 也不會 因此強引用是造成 j a 記憶體洩漏的主要原因之一。軟引用需要用 softreferen...