マイクロサービスgrpcからクライアント、サービス側
32143 ワード
protoファイルは次のとおりです.
protoまとめ:
1.protoはProdViewServiceGrpcファイルを生成し、生成するコード2を含む.oneof check_xxx{...}の役割は、oneof checkのように、サービスにパラメータを入力して空にすることはできません.cpid{int 32 cpid=2;//サービス側から伝わるcpidは空ではなく値がない}3.Message ProdHoldingInfoResponseのrepeated ProdHoldingInfoRecord records=3は、返される結果セットであり、1つの配列として理解され、message ProdHoldingInfoRecordで定義されている具体的な返される結果セットのパラメータが表示されます.Responseでは配列を返す必要がある場合があります.repeated string name=4と書くと、nameというstringタイプの配列が返されます.
クライアントは次のとおりです.
クライアントの概要
一般的にインタフェースはフロントエンドから伝達されたパラメータを受け取ってmodleに入れ、インタフェースはクライアント関数を呼び出してmodleを伝達し、クライアント関数はmodleのパラメータを受け入れて初歩的な処理判断処理を行い、BuilderにprotoのRequestのいくつかのパラメータを設定し、BuilderはRequestに加え、RequestはResponseに加えてサービス側関数を呼び出す.
サービス側は次のとおりです.
サービス側まとめ
クライアントRequestはパラメータをサービス側の関数処理に伝達し、関数はDao層インタフェースを呼び出してデータベースにデータを取りに行き、取ったデータはRecordに入れ、RecordはBuilderに入れ、BuilderはResponseに入れ、最後にクライアントに戻る
message ProdHoldingInfoRequest {
oneof check_paging {
int32 paging = 1001; //
}
oneof check_pageno {
int32 pageno = 1002; //
}
oneof check_pagelength {
int32 pagelength = 1003; //
}
oneof check_total {
int32 total = 1004; //
}
string sort = 1005; //
oneof check_czr {
int32 czr = 1; //
}
oneof check_cpid {
int32 cpid = 2; //ID
}
}
message ProdHoldingInfoResponse {
int32 code = 1; //
string note = 2; //
int32 hasrecordset = 1006; //
int32 total = 1007; //
repeated ProdHoldingInfoRecord records = 3; //
}
message ProdHoldingInfoRecord { //
string cpdm = 1;
string khmc = 2;
string khh = 3;
string khid = 4;
string cpfe = 5;
string djfe = 6;
string zxsz = 7;
string zxjz = 8;
}
service ProdViewService {
rpc ProdHoldingInfo (ProdHoldingInfoRequest) returns (ProdHoldingInfoResponse) {};
}
protoまとめ:
1.protoはProdViewServiceGrpcファイルを生成し、生成するコード2を含む.oneof check_xxx{...}の役割は、oneof checkのように、サービスにパラメータを入力して空にすることはできません.cpid{int 32 cpid=2;//サービス側から伝わるcpidは空ではなく値がない}3.Message ProdHoldingInfoResponseのrepeated ProdHoldingInfoRecord records=3は、返される結果セットであり、1つの配列として理解され、message ProdHoldingInfoRecordで定義されている具体的な返される結果セットのパラメータが表示されます.Responseでは配列を返す必要がある場合があります.repeated string name=4と書くと、nameというstringタイプの配列が返されます.
クライアントは次のとおりです.
public ProdHoldingInfoResponse prodHoldingInfo(ProdHoldingInfoModel prodHoldingInfoModel, int czr) { //ProdHoldingInfoModel
ProdHoldingInfoRequest.Builder prodHoldingInfoBuild = ProdHoldingInfoRequest.newBuilder(); // Builder
if (null != prodHoldingInfoModel.getPaging()) { // paging
prodHoldingInfoBuild.setPaging(prodHoldingInfoModel.getPaging()); // Builder paging
}
if (null != prodHoldingInfoModel.getPageNo()) {
prodHoldingInfoBuild.setPageno(prodHoldingInfoModel.getPageNo());
}
if (null != prodHoldingInfoModel.getPageLength()) {
prodHoldingInfoBuild.setPagelength(prodHoldingInfoModel.getPageLength());
}
if (null != prodHoldingInfoModel.getTotalRows()) {
prodHoldingInfoBuild.setTotal(prodHoldingInfoModel.getTotalRows());
}
if (null != prodHoldingInfoModel.getSort()) {
prodHoldingInfoBuild.setSort(prodHoldingInfoModel.getSort());
}
prodHoldingInfoBuild.setCzr(czr);
if (null != prodHoldingInfoModel.getCpid()) {
prodHoldingInfoBuild.setCpid(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<ProdHoldingInfoResponse> responseObserver) { //
Map<String, Object> ins = new HashMap<>(2);
if (ProdHoldingInfoRequest.CheckPagingCase.PAGING == request.getCheckPagingCase()) { // paging
ins.put("I_PAGING", request.getPaging()); // put ins
}
if (ProdHoldingInfoRequest.CheckPagenoCase.PAGENO == request.getCheckPagenoCase()) {
ins.put("I_PAGENO", request.getPageno());
}
if (ProdHoldingInfoRequest.CheckPagelengthCase.PAGELENGTH == request.getCheckPagelengthCase()) {
ins.put("I_PAGELENGTH", request.getPagelength());
}
if (ProdHoldingInfoRequest.CheckTotalCase.TOTAL == request.getCheckTotalCase()) {
ins.put("I_TOTALROWS", request.getTotal());
}
ins.put("I_SORT", request.getSort());
if (ProdHoldingInfoRequest.CheckCzrCase.CZR == request.getCheckCzrCase()) {
ins.put("I_CZR", request.getCzr());
}
if (ProdHoldingInfoRequest.CheckCpidCase.CPID == request.getCheckCpidCase()) {
ins.put("I_CPID", request.getCpid());
}
List<QueryProdHoldingInfoModel> resultList = prodViewDao.queryProdHoldingInfoBase(ins); // ins Dao queryProdHoldingInfoBase, resultList
ProdHoldingInfoResponse.Builder response = ProdHoldingInfoResponse.newBuilder();// Builder
try {
response.setCode((Integer) ins.get("O_CODE")); //
response.setNote((String) ins.get("O_NOTE"));
response.setHasrecordset((Integer) ins.get("O_HASRECORDSET"));
response.setTotal((Integer) ins.get("I_TOTALROWS"));
for (QueryProdHoldingInfoModel queryProdHoldingInfo : resultList) { // resultList
ProdHoldingInfoRecord record = ProdHoldingInfoRecord.newBuilder() //
.setCpdm(getString(queryProdHoldingInfo.getCpdm()))
.setKhmc(getString(queryProdHoldingInfo.getKhmc()))
.setKhh(getString(queryProdHoldingInfo.getKhh()))
.setKhid(getString(queryProdHoldingInfo.getKhid()))
.setCpfe(getString(queryProdHoldingInfo.getCpfe()))
.setDjfe(getString(queryProdHoldingInfo.getDjfe()))
.setZxsz(getString(queryProdHoldingInfo.getZxsz()))
.setZxjz(getString(queryProdHoldingInfo.getZxjz()))
.build();
response.addRecords(record); // Builder
}
} catch (Exception e) {
log.error(e.getMessage());
responseObserver.onError(new StatusException(Status.INTERNAL));
return;
}
ProdHoldingInfoResponse resp = response.build(); // Builder Response
responseObserver.onNext(resp); // Response
responseObserver.onCompleted();
}
サービス側まとめ
クライアントRequestはパラメータをサービス側の関数処理に伝達し、関数はDao層インタフェースを呼び出してデータベースにデータを取りに行き、取ったデータはRecordに入れ、RecordはBuilderに入れ、BuilderはResponseに入れ、最後にクライアントに戻る