1. 程式人生 > >netty學習十:google grpc框架環境搭建以及第一個demo

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 裡更關注的是模型(