java grpc 客户端处理 go 服务端多返回值_grpc基础实践(二)
在此篇中我們將簡要介紹關(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 配置嵌套事务_Spring 事
- 下一篇: 博客写作在App