日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)

發(fā)布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在此篇中我們將簡要介紹關(guān)于grpc對java客戶端的實現(xiàn)。

在開始開發(fā)前,我們需要先導(dǎo)入

io.grpc grpc-netty 1.11.0io.grpc grpc-protobuf 1.11.0io.grpc grpc-stub 1.11.0

如果是Android除了這幾個包外,你可能還需要一個javax.annotation:javax.annotation-api:1.2包,這個大家可以自行百度。

當(dāng)然你如果想自己編譯proto文件,你還需要引用一些插件,具體你可以看:

https://github.com/grpc/grpc-java

完成包的導(dǎo)入后我們就可以正式開始開發(fā)了,首先需要導(dǎo)入proto的生成文件。

根據(jù)上篇中,大約有3個文件,在這里再說明一次,多文件必須把引用的文件一同編譯。否則你將不會生成outerclass那個文件,導(dǎo)致報錯。這點一定要注意。

接下來我們就可以編碼了,在java端grpc存在3種stub,包括stub,blockingstub,和futurestub。

其中futurestub只支持普通的grpc服務(wù),不支持流的形式。

blockingstub支持普通的和服務(wù)端流。

stub支持所有的形式。

先讓我們看一下普通形式請求和服務(wù)端流形式請求。

int port = 50052; String urlPath = "192.168.2.223"; Channel channel; //設(shè)置grpc鏈接 channel = NettyChannelBuilder.forAddress(urlPath, port).negotiationType(NegotiationType.PLAINTEXT).build(); UserServerGrpc.UserServerBlockingStub userServerBlockingStub = UserServerGrpc.newBlockingStub(channel); UserVo.User user = UserVo.User.newBuilder().setUserId("1").build(); //根據(jù)條件獲得用戶 UserVo.User u = userServerBlockingStub.getUserById(user); System.out.println(u); System.out.println("=================================="); //獲得用戶列表 UserVo.Empty empty = UserVo.Empty.newBuilder().build(); UserVo.UserList userList = userServerBlockingStub.getList(empty); for(int i=0;i userIterator = userServerBlockingStub.getListStream(empty); while (userIterator.hasNext()){ System.out.println(userIterator.next().toString()); }

這兩種比較簡單,只需要我們建立一個stub,然后調(diào)用對應(yīng)的方法填入數(shù)據(jù)即可。

對于客戶端流和雙向流是一樣的,我們首先需要實現(xiàn)一個StreamObserver的接口,在onnext方法中拿到返回數(shù)據(jù)。在onCompleted中判斷是否完成。

final StreamObserver streamObserver = new StreamObserver() { @Override public void onNext(UserVo.UserList userList) { //拿到服務(wù)端返回值 } @Override public void onError(Throwable throwable) { } @Override public void onCompleted() { //完成 } }; UserVo.User U1 = UserVo.User.newBuilder().setUserId("3").setUserName("小劉").setAge(10).build(); UserVo.User U2 = UserVo.User.newBuilder().setUserId("4").setUserName("小紅").setAge(23).build(); UserVo.UserList userList1 = UserVo.UserList.newBuilder().setU(1,U1).setU(2,U2).build(); UserServerGrpc.UserServerStub userServerBlockingStub1 = UserServerGrpc.newStub(channel); final StreamObserver streamObserver1 = userServerBlockingStub1.setUserStream(streamObserver); //發(fā)送數(shù)據(jù) streamObserver1.onNext(U1); streamObserver1.onNext(U2); //發(fā)送完成 streamObserver1.onCompleted();

到此,grpc的4種形式基本就算是結(jié)束,grpc在調(diào)用上比較簡單,主要是在proto的編譯上。如果編譯正確基本使用還是比較簡單的。

總結(jié)

以上是生活随笔為你收集整理的java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。