proto檔案如下:
message prodholdinginforequest
oneof check_pageno
oneof check_pagelength
oneof check_total
string sort =
1005
;//排序條件
oneof check_czr
oneof check_cpid
}message prodholdinginforesponse
message prodholdinginforecord
service prodviewservice
;}
proto總結:
1.proto將會生成prodviewservicegrpc檔案,裡面是生成的**
2.oneof check_***的作用就是服務裡傳進去引數不能為空,
如oneof check_cpid
3.message prodholdinginforesponse裡的repeated prodholdinginforecord records=3 是返回的乙個結果集,可以理解為乙個陣列,
可以看到message prodholdinginforecord裡定義的具體返回結果集的引數。
有時候response裡需要返回陣列,可以這樣寫repeated string name=4,這就返回了乙個叫name的string型別陣列。
客戶端如下:
public prodholdinginforesponse prodholdinginfo
(prodholdinginfomodel prodholdinginfomodel, int czr)if(
null
!= prodholdinginfomodel.
getpageno()
)if(null
!= prodholdinginfomodel.
getpagelength()
)if(null
!= prodholdinginfomodel.
gettotalrows()
)if(null
!= prodholdinginfomodel.
getsort()
) prodholdinginfobuild.
setczr
(czr);if
(null
!= prodholdinginfomodel.
getcpid()
) prodholdinginforequest req = prodholdinginfobuild.
build()
;//建立request,把builder加到request裡
prodholdinginforesponse resp = stub.
prodholdinginfo
(req)
;//建立response,呼叫服務端函式,request作為引數。當然上面乙個語句和這個語句可合為一條,呼叫服務端函式,直接把builder作為引數如:prodholdinginforesponse resp = stub.prodholdinginfo(prodholdinginfobuild.build());
return resp;
}
客戶端總結
一般介面接受前端傳進來的引數放到modle裡,介面呼叫客戶端函式並將modle傳過來,客戶端函式接受modle裡的引數做初步處理判斷處理,
在builder裡設定proto中的request 的一些引數,然後builder加到request,request加到response並呼叫服務端函式。
服務端如下:
public
void
prodholdinginfo
(prodholdinginforequest request, streamobserver responseobserver)
if(prodholdinginforequest.checkpagenocase.
pageno
== request.
getcheckpagenocase()
)if(prodholdinginforequest.checkpagelengthcase.
pagelength
== request.
getcheckpagelengthcase()
)if(prodholdinginforequest.checktotalcase.
total
== request.
getchecktotalcase()
) ins.
put(
"i_sort"
, request.
getsort()
);if(prodholdinginforequest.checkczrcase.
czr== request.
getcheckczrcase()
)if(prodholdinginforequest.checkcpidcase.
cpid
== request.
getcheckcpidcase()
) list resultlist = prodviewdao.
queryprodholdinginfobase
(ins)
;//帶有所有請求引數的ins呼叫dao層的queryprodholdinginfobase,返回的結果集存為resultlist
prodholdinginforesponse.builder response = prodholdinginforesponse.
newbuilder()
;//建立返回型別builder
try}
catch
(exception e)
prodholdinginforesponse resp = response.
build()
;//將builder加入到response裡
responseobserver.
onnext
(resp)
;//返回response
responseobserver.
oncompleted()
;}
服務端總結
客戶端request將引數傳到服務端函式處理,函式呼叫dao層介面去資料庫取資料,取到的資料放到record中,record加builder裡,builder又加response 裡,最後返回到客戶端
微服務Eureka客戶端與服務配置
2 eureka服務端工程 eureka server 1 失效剔除 2 自我保護 eureka.instance.ip address 127.0.0.1 設定當前的ip eureka.instance.prefer ip address true 是否ip優名 獲取 provider ip與埠 ...
c 客戶端 grpc gRPC 從學習到生產
博文 about.sourcegraph.com go grpc in 答案就是 soap 好吧,開個玩笑,當然不可能是 soap 了。現在流行的做法是 http json rest api alan 說 如果這輩子再也不寫另乙個 rest 客戶端庫的話,那就可以很幸福的死去了 因為這是最無聊的事情...
Azure Blob實戰之 從客戶端到FTP
背景 azure上的blob至今微軟官方還未給出乙個很好的客戶端工具,這嚴重影響了資料互動,現將本人最近測試整理的blob上傳工具使用經驗與大家分享 包括ftp的workerrole 環境 vs2010 with sp1 vs2012 windows azure sdk 1.5 windows az...