netty學習十:google grpc框架環境搭建以及第一個demo
概述
本文將會介紹兩部分內容:
1、window 7 上搭建grpc環境;
2、構建關於grpc的java小demo.
下載grpc java依賴包
為了能生成針對java的grpc客戶端和服務端程式碼(官方叫stub),需要下載一些java包和grpc編譯器以及一些gradle 外掛
java依賴包
compile ‘io.grpc:grpc-netty:1.4.0’
compile ‘io.grpc:grpc-protobuf:1.4.0’
compile ‘io.grpc:grpc-stub:1.4.0’
gradle構建指令碼
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.1'
}
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.2.0"
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.4.0'
}
}
generateProtoTasks {
all()*.plugins {
grpc {}
}
}
}
使用gradle命令
gradle clean build
由於要下載很多依賴包,時間會比較長.
備註
最好使用gradle 3來構建,gradle 2太舊了
編寫proto檔案
src/main/proto/grpc/firstdemo/Student.proto
syntax = "proto3";
package firstdemo;
option optimize_for=SPEED;
option java_package="firstdemo";
option java_outer_classname="StudentProto";
option java_multiple_files=true;
service StudentService {
rpc getRealname(RequestInfo) returns (ResponseInfo) {}
}
message RequestInfo {
string username = 1;
}
message ResponseInfo {
string realname = 1;
}
注意這裡需要使用proto3
syntax = “proto3”;
生成gprc java stub類
先執行
gradle clean build
再執行
gradle generateProto
執行成功後,會生成如下目錄
grpc
java
將兩個目錄下的java檔案拷貝到
src/main/proto/grpc/firstdemo/generated
拷貝完後src/main/proto/grpc/firstdemo/generated目錄下會有如下檔案
RequestInfo.java
ResponseInfo.java
ResponseInfoOrBuilder.java
StudentProto.java
StudentServiceGrpc.java
備註
整合grpc後,不能再使用之前的proto2的protoc編譯命令了,這個命令只是會生成用於傳遞的訊息物件,並不會生成客戶端好服務端的stub類
編寫業務實現類
package grpc.firstdemo.server;
import grpc.firstdemo.generated.RequestInfo;
import grpc.firstdemo.generated.ResponseInfo;
import grpc.firstdemo.generated.StudentServiceGrpc.StudentServiceImplBase;
import io.grpc.stub.StreamObserver;
public class StudentBizService extends StudentServiceImplBase{
@Override
public void getRealname(RequestInfo request, StreamObserver<ResponseInfo> responseObserver) {
System.out.println("接收到客戶端的資訊:"+request.getUsername());
ResponseInfo responseInfo = ResponseInfo.newBuilder().setRealname("Sam").build();
responseObserver.onNext(responseInfo);
responseObserver.onCompleted();
}
}
需要繼承StudentServiceImplBase類,覆蓋getRealname方法.
服務端程式碼
package grpc.firstdemo.server;
import java.io.IOException;
import io.grpc.Server;
import io.grpc.ServerBuilder;
public class GrpcServer {
private Server server;
private void start() throws IOException {
this.server = ServerBuilder.forPort(8899)
.addService(new StudentBizService())
.build().start();
System.out.println("server started");
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
GrpcServer.this.stop();
}
}));
}
private void stop() {
if (this.server != null) {
this.server.shutdown();
}
}
private void awaitTermination() throws InterruptedException {
if (this.server != null) {
this.server.awaitTermination();
}
}
public static void main(String[] args) throws IOException, InterruptedException {
GrpcServer grpcServer = new GrpcServer();
grpcServer.start();
//讓grpc server啟動後,處於等待狀態,監聽客戶端請求
grpcServer.awaitTermination();
}
}
客戶端程式碼
package grpc.firstdemo.client;
import grpc.firstdemo.generated.RequestInfo;
import grpc.firstdemo.generated.ResponseInfo;
import grpc.firstdemo.generated.StudentServiceGrpc;
import grpc.firstdemo.generated.StudentServiceGrpc.StudentServiceBlockingStub;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
public class GrpcClient {
public static void main(String[] args) {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 8899)
.usePlaintext(true)
.build();
StudentServiceBlockingStub blockStub = StudentServiceGrpc.newBlockingStub(channel);
ResponseInfo responseInfo = blockStub.getRealname(RequestInfo.newBuilder().setUsername("sam").build());
System.out.println(responseInfo.getRealname());
}
}
執行程式碼
分別執行GrpcServer類和GrpcClient類的main方法,啟動服務端和客戶端,正常情況下會列印如下日誌:
接收到客戶端的資訊:sam
csdn code 路徑
這個專案的原始碼放置在csdn code上,歡迎訪問。
netty_study
相關推薦
netty學習十:google grpc框架環境搭建以及第一個demo
概述 本文將會介紹兩部分內容: 1、window 7 上搭建grpc環境; 2、構建關於grpc的java小demo. 下載grpc java依賴包 為了能生成針對java的grpc客戶端和服務端程式碼(官方叫stub),需要下載一些jav
OpenGL VS2012環境搭建以及第一個OpenGL例子 WIN7 64位系統
學習OpenGL是想在Coocs2d-x中加入讀取Maya等軟體做出來的動畫檔案。 在W
Python-Selenium2做Web自動化測試(3)-環境搭建以及第一個指令碼
下載包之後: 使用 easy_install selenium or pip install selenium 來安裝包 或者去安裝原始碼自行編譯 python setup.py build python setup.py install 或者去下載
pcl1.8.0+QT5.7.0+vs2013 win7 x64環境配置以及第一個小程式實現
幾經波折終於配置成功,現在總結下網路上的較簡潔的方法分享給大家(第一次寫博,謝大家支援) 主要參考部落格: http://blog.csdn.net/u012750702/article/details/53046210 http://blog.csdn.net/woka
64位win7下,CodeBlock13.12配置GTK3.x環境以及第一個DEMO的執行
MAIL:crachman#qq.com OS版本:windows 7 Ultimate 64Bit English Version GTK版本:GTK+ 3.6.4下載32位版本(官網提示:64位版本相容性不保證)如圖2所示 一、下載安裝
C語言 + GTK3+ Visual Studio 2015環境配置 以及第一個GTK介面程式
學習了C語言之後是不是想做一個介面程式,可以明顯的以介面的方式呈現出來,你如果鍾愛C語言,那麼GTK將會是不二的選擇。 GTK+ 是一種圖形使用者介面(GUI)工具包,雖然本是Linux上面的東西,但是
Linux學習總結(三十九)lnmp環境搭建1-mysql,php 安裝
lnmp mysql php php-fpm 之前我們介紹過lamp,lnmp和lamp相比就是把apache換為了nginx,nginx也是目前比較流行的一款web server,在處理高並發請求上,性能要遠勝於apache。apache將php作為一個自己的一個擴展模塊來使用,nginx則
hibernate框架環境搭建
ide span req 建表 sign 自動建表 都是 顯示 package 一.概述:hibernate框架是作用於dao層的,實現對數據的持久化保存.通過面向對象的方式操作數據庫. 二.hibernate框架的搭建 1.導包 lib目錄下的required
java核心學習(十七) IO框架---對象序列化
throws .get data () etag 三種 bject log 使用 一、使用對象流實現序列化。 先定義一個可序列化的對象 package com.shy.IO; import java.io.Serializable; public cla
java核心學習(十八) javaNIO框架---“塊”模型的IO
rac tag pmod 輸出流 decode 非阻塞 實際應用 byte channel 一、java新IO概述 javaIO中的輸入流和輸出流都是通過字節的移動來處理的,面向流的輸入輸出系統一次只能處理一個字節,因此效率不高,而且傳統的輸入輸出流是阻塞試的,也就是說
VUE學習,vue運行環境搭建遇見的小問題
運行 打開 serve 關閉 分行 集成 解決方法 使用 vue 1.使用vscode來編輯項目,那麽首先給它搭一個vue運行的環境,打開集成終端,使用npm install live-server -g安裝live-server. problem1:cmd終端分行問題。解
【Weex學習】第一章:環境搭建
下載鏈接 spa 鏈接 java androi tps http nload 第一章 1、安裝Node.js //查看版本node -vnpm -v 2、安裝Java 下載鏈接:https://www.java.com/zh_CN/ 3、安裝Git 下載鏈接:https
Java學習筆記一:Java開發環境搭建
默認安裝 進制 二進制文件 text ase www. java學習 span home Java開發環境搭建 第一步:安裝JDK 1.下載地址:http://www.oracle.com/technetwork/java/javase/downloads 非
Hibernate框架環境搭建(詳解)
obj 模型 junit demo 半成品 src 數據表 mys 種類 具體說hibernate框架的項目搭建之前,首先說一下什麽是框架。。。 框架可以理解成一個半成品的項目,它封裝了一些功能,我麽需要掌握的是如何駕馭這些功能,不需要操心它是怎麽實現的。其實他
Spring01-->Spring框架環境搭建
ring0 fin cat 默認 def 所有 升級 div 搜索 1.導入jar包 1.1 四個核心包和一個日誌包(commons-logging) 2.在src下新建applicationContext.xml 2.1 文件名稱和路徑可以自定義
SpringMVC01-->SpringMVC框架環境搭建(註解方式)
掃描 ota images 導入 ram pri context resources 幫助 1.導入jar包 2.在web.xml中配置前端控制器DispatcherServlet 2.1 如果不配置<init-param>,則默認找/WEB-INF/&l
SSM框架—環境搭建(MyEclipse+Tomcat+MAVEN+SVN)
1.JDK的安裝 首先下載JDK,這個從sun公司官網可以下載,根據自己的系統選擇64位還是32位,安裝過程就是next一路到底。安裝完成之後當然要配置環境變量了。 1.1新建變數名:JAVA_HOME 變數值:E:
Elastic-Job學習筆記-定時任務框架的搭建
官方文件:http://elasticjob.io/docs/elastic-job-lite/00-overview/ elastic-job學習(網易樂得技術團隊,具體說明) http://tech.lede.com/2017/06/23/rd/server/elasticJob/
hibernate框架環境搭建與使用
文章出處:https://www.cnblogs.com/hq233/p/6497985.html 搭建環境 一、新建一個專案 , 導包 一個是hibernate的jar包,一個是jdbc的jar包 hibernate的jar包 這些jar包全部匯入 二、配置
Django學習筆記——背景瞭解及環境搭建
背景瞭解 Django是什麼 Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MVC的框架模式,即模型M,檢視V和控制器C。 特點 在Django中,控制器接受使用者輸入的部分由框架自行處理,所以 Django 裡更關注的是模型(