微服務從grpc到客戶端再到服務端

2021-09-26 21:17:15 字數 3298 閱讀 6914

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...