国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

RPC框架實(shí)踐之:Google gRPC

vibiu / 2800人閱讀

摘要:與文章框架實(shí)踐之一文中實(shí)踐的另一種通用框架能通過(guò)自動(dòng)生成對(duì)應(yīng)語(yǔ)言的接口類(lèi)似,也能自動(dòng)地生成和的存根,我們只需要一個(gè)命令就能快速搭建起運(yùn)行環(huán)境。類(lèi)似于之前對(duì)于框架的實(shí)踐步驟,下面一一闡述。


概述

gRPC是Google開(kāi)源的通用高性能RPC框架,它支持的是使用Protocol Buffers來(lái)編寫(xiě)Service定義,支持較多語(yǔ)言擴(kuò)平臺(tái)并且擁有強(qiáng)大的二進(jìn)制序列化工具集。與文章《RPC框架實(shí)踐之:Apache Thrift》 一文中實(shí)踐的另一種通用RPC框架 Thrift 能通過(guò)Generator自動(dòng)生成對(duì)應(yīng)語(yǔ)言的Service接口類(lèi)似,gRPC也能 自動(dòng)地生成 Server和Client的 Service存根(Stub),我們只需要 一個(gè)命令 就能快速搭建起RPC運(yùn)行環(huán)境。

下面實(shí)踐一下gRPC框架,做的事情就是:Client端通過(guò)遠(yuǎn)程RPC調(diào)用Server的獲取時(shí)間的接口,從而將服務(wù)器時(shí)間獲取到本地并顯示。

類(lèi)似于之前對(duì)于 RPC框架: Thrift 的實(shí)踐步驟,下面一一闡述。

注: 本文首發(fā)于 My 公眾號(hào) CodeSheep ,可 長(zhǎng)按掃描 下面的 小心心 來(lái)訂閱 ↓ ↓ ↓


開(kāi)發(fā)gRPC-API

首先創(chuàng)建一個(gè)基于Maven的項(xiàng)目: GrpcAPI

pom中加入grpc相關(guān)的依賴(lài)

        
            io.grpc
            grpc-all
            1.12.0
        

這個(gè)grpc-all包含了很多grpc相關(guān)的組件:grpc-netty 、 grpc-protobuf 、grpc-stub 等等

pom中加入grpc相關(guān)的 build插件

這里添加兩個(gè)Maven插件,目的是后面需要用這些插件來(lái)執(zhí)行Protocol Buffers命令,從而自動(dòng)生成相關(guān)的Stub代碼:

os-maven-plugin:生成平臺(tái)無(wú)關(guān)的屬性
protobuf-maven-plugin:執(zhí)行Protocol Buffers命令并生成Stub代碼庫(kù)

    
        
            
                kr.motd.maven
                os-maven-plugin
                1.4.1.Final
            
        
        
            
                org.xolstice.maven.plugins
                protobuf-maven-plugin
                0.5.0
                
                    grpc-java
                    com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}
                    io.grpc:protoc-gen-grpc-java:1.2.0:exe:${os.detected.classifier}
                
                
                    
                        
                            compile
                            compile-custom
                        
                    
                
            
        
    

編寫(xiě).proto的服務(wù)定義文件

這里.proto文件的作用和寫(xiě)法就和我的前一篇文章《RPC框架實(shí)踐之:Apache Thrift》 一文中Thrift所要求的.thrift文件編寫(xiě)一樣,是有其自己的語(yǔ)法要求的!

syntax = "proto3”;   // 語(yǔ)法版本

// stub選項(xiàng)
option java_package = "com.hansonwang99.grpc.api”;
option java_outer_classname = “RPCDateServiceApi”;
option java_multiple_files = true;

// 定義包名,類(lèi)似于我的文章《RPC框架實(shí)踐之:Apache Thrift》中的Thrift的namespace
package com.hansonwang99.grpc.api;

// 服務(wù)接口定義,服務(wù)端和客戶(hù)端都要遵守該接口進(jìn)行通信
service RPCDateService {
  rpc getDate (RPCDateRequest) returns (RPCDateResponse) {}
}

// 定義消息(請(qǐng)求)
message RPCDateRequest {
  string userName = 1;
}

// 定義消息(響應(yīng))
message RPCDateResponse {
  string serverDate = 1;
}

執(zhí)行mvn compile命令來(lái)自動(dòng)生成代碼Stub

mvn編譯完成以后,在target/generated-sources目錄下就能看到根據(jù)上面.proto文件自動(dòng)轉(zhuǎn)化生成的Java代碼Stub

代碼生成結(jié)果如下所示

好了,既然gRPC-API已經(jīng)有了,下面可以分別編寫(xiě)服務(wù)端和客戶(hù)端


開(kāi)發(fā)gRPC服務(wù)端

創(chuàng)建基于Maven的項(xiàng)目:Server

pom中添加 GrpcAPI 依賴(lài)

        
            com.hansonwang99
            GrpcAPI
            1.0-SNAPSHOT
            compile
        

接下來(lái)一步比較關(guān)鍵

實(shí)現(xiàn)gRPC服務(wù)接口

public class RPCDateServiceImpl extends RPCDateServiceGrpc.RPCDateServiceImplBase{
    @Override
    public void getDate(RPCDateRequest request, StreamObserver responseObserver) {
        RPCDateResponse rpcDateResponse = null;
        Date now=new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("今天是"+"yyyy年MM月dd日 E kk點(diǎn)mm分”);
        String nowTime = simpleDateFormat.format( now );
        try {
            rpcDateResponse = RPCDateResponse
                    .newBuilder()
                    .setServerDate( "Welcome " + request.getUserName()  + ", " + nowTime )
                    .build();
        } catch (Exception e) {
            responseObserver.onError(e);
        } finally {
            responseObserver.onNext( rpcDateResponse );
        }
        responseObserver.onCompleted();
    }
}

我想此處重寫(xiě)的getDate()方法并不陌生吧,這正是上文 .proto 文件中定義的Service接口。
此處邏輯比較簡(jiǎn)單:獲取當(dāng)前時(shí)間,并且將其與請(qǐng)求RPCDateRequest中提取出的userName字段進(jìn)行拼接,然后返回給調(diào)用端!形成一個(gè)閉環(huán)

創(chuàng)建gRPC服務(wù)端啟動(dòng)類(lèi)

public class GRPCServer {
    private static final int port = 9999;
    public static void main( String[] args ) throws Exception {
        Server server = ServerBuilder.
                forPort(port)
                .addService( new RPCDateServiceImpl() )
                .build().start();
        System.out.println( "grpc服務(wù)端啟動(dòng)成功, 端口=" + port );
        server.awaitTermination();
    }
}

端口自定義的9999,也就是在該端口監(jiān)聽(tīng)。現(xiàn)在可以立即運(yùn)行GRPCServer,來(lái)啟動(dòng)服務(wù)端


開(kāi)發(fā)gRPC客戶(hù)端

創(chuàng)建基于Maven的項(xiàng)目:Client

pom中依然需要添加 GrpcAPI 依賴(lài)

        
            com.hansonwang99
            GrpcAPI
            1.0-SNAPSHOT
            compile
        

創(chuàng)建gRPC客戶(hù)端啟動(dòng)類(lèi)

public class GRPCClient {
    private static final String host = “l(fā)ocalhost”;
    private static final int serverPort = 9999;

    public static void main( String[] args ) throws Exception {
        ManagedChannel managedChannel = ManagedChannelBuilder.forAddress( host, serverPort ).usePlaintext().build();
        try {
            RPCDateServiceGrpc.RPCDateServiceBlockingStub rpcDateService = RPCDateServiceGrpc.newBlockingStub( managedChannel );
            RPCDateRequest  rpcDateRequest = RPCDateRequest
                    .newBuilder()
                    .setUserName(“hansonwang99”)
                    .build();
            RPCDateResponse rpcDateResponse = rpcDateService.getDate( rpcDateRequest );
            System.out.println( rpcDateResponse.getServerDate() );
        } finally {
            managedChannel.shutdown();
        }
    }
}

現(xiàn)在立即啟動(dòng) GRPCClient!


C-S通信實(shí)驗(yàn)

還記得我們的目標(biāo)嗎?

RPC完成的即是遠(yuǎn)程的過(guò)程調(diào)用,在本實(shí)驗(yàn)中那就是客戶(hù)端可以遠(yuǎn)程調(diào)用服務(wù)端的getDate()過(guò)程,并將結(jié)果取到客戶(hù)端來(lái)顯示!


后記

本文實(shí)驗(yàn)代碼在此 → 需要自取

作者更多的原創(chuàng)文章在此,歡迎觀賞

My Personal Blog

作者更多的SpringBt實(shí)踐文章在此:

Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)

SpringBoot應(yīng)用部署于外置Tomcat容器

ElasticSearch搜索引擎在SpringBt中的實(shí)踐

初探Kotlin+SpringBoot聯(lián)合編程

Spring Boot日志框架實(shí)踐

SpringBoot優(yōu)雅編碼之:Lombok加持


如果有興趣,也可以抽點(diǎn)時(shí)間看看作者一些關(guān)于容器化、微服務(wù)化方面的文章:

利用K8S技術(shù)棧打造個(gè)人私有云 連載文章

從一份配置清單詳解Nginx服務(wù)器配置

Docker容器可視化監(jiān)控中心搭建

利用ELK搭建Docker容器化應(yīng)用日志中心

RPC框架實(shí)踐之:Apache Thrift

RPC框架實(shí)踐之:Google gRPC

微服務(wù)調(diào)用鏈追蹤中心搭建

Docker容器跨主機(jī)通信

Docker Swarm集群初探

高效編寫(xiě)Dockerfile的幾條準(zhǔn)則



文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/11870.html

相關(guān)文章

  • RPC框架實(shí)踐Google gRPC

    摘要:與文章框架實(shí)踐之一文中實(shí)踐的另一種通用框架能通過(guò)自動(dòng)生成對(duì)應(yīng)語(yǔ)言的接口類(lèi)似,也能自動(dòng)地生成和的存根,我們只需要一個(gè)命令就能快速搭建起運(yùn)行環(huán)境。類(lèi)似于之前對(duì)于框架的實(shí)踐步驟,下面一一闡述。 showImg(https://segmentfault.com/img/remote/1460000014946557); 概述 gRPC是Google開(kāi)源的通用高性能RPC框架,它支持的是使用P...

    malakashi 評(píng)論0 收藏0
  • RPC框架實(shí)踐:Apache Thrift

    摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來(lái)的調(diào)用鏈就是一個(gè)遠(yuǎn)程調(diào)用的例子,只不過(guò)這篇文章里是通過(guò)這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時(shí)效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過(guò)程調(diào)...

    Gilbertat 評(píng)論0 收藏0
  • RPC框架實(shí)踐:Apache Thrift

    摘要:在文章微服務(wù)調(diào)用鏈追蹤中心搭建一文中模擬出來(lái)的調(diào)用鏈就是一個(gè)遠(yuǎn)程調(diào)用的例子,只不過(guò)這篇文章里是通過(guò)這種同步調(diào)用方式,利用的是協(xié)議在應(yīng)用層完成的,這種方法雖然奏效,但有時(shí)效率并不高。 showImg(https://segmentfault.com/img/remote/1460000014858219); 一、概述 RPC(Remote Procedure Call)即 遠(yuǎn)程過(guò)程調(diào)...

    keithxiaoy 評(píng)論0 收藏0
  • SpringBoot熱部署加持

    摘要:概述進(jìn)行的開(kāi)發(fā)過(guò)程中,我們很多時(shí)候經(jīng)常需要重啟服務(wù)器才能保證修改的源代碼文件或者一些諸如的配置文件以及一些靜態(tài)文件生效,這樣耗時(shí)又低效。 showImg(https://segmentfault.com/img/remote/1460000015363888); 概述 進(jìn)行SpringBoot的Web開(kāi)發(fā)過(guò)程中,我們很多時(shí)候經(jīng)常需要重啟Web服務(wù)器才能保證修改的 源代碼文件、或者一些...

    ixlei 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<