精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

gRPC對比REST,在Spring Boot 中使用gRPC

開發 項目管理
本文創建了簡單的 Demo 項目,展示了在 Spring Boot、Java 中 gRPC 客戶端和服務器的實現和通信,以及通過 protobuf 編譯器生成客戶端和服務器代碼的單獨 proto 項目。

1 為什么選擇 gRPC

gRPC是一種高性能的先進RPC(遠程過程調用)框架,是開源的,并且兼容不同的環境。它使用協議緩沖區作為消息交換格式。

不同語言中的 gRPC 客戶端和服務器通信示例不同語言中的 gRPC 客戶端和服務器通信示例

gRPC可以讓客戶端代碼像調用本地對象方法一樣輕松地調用位于不同計算機上的服務器應用程序的方法,從而簡化了開發分布式應用程序和服務的過程。

2 gRPC VS REST(簡要比較)

主要的區別在于:

  • 協議:gRPC 使用 HTTP/2,但通常 REST 使用 HTTP/1.1(下面進行比較)。簡而言之,HTTP/2 比 HTTP/1.1 快得多,效率更高。
  • 數據格式:REST 通常使用 JSON,而 gRPC 使用協議緩沖區。
  • API 格式:gRPC 的 API 范式是 RPC(遠程過程調用),而 REST 基于表現層狀態轉移模型。
  • 流式傳輸:雖然 gRPC 支持雙向流式傳輸,但 REST 僅限于請求-響應模式。

圖片圖片

3 項目結構

  • grpc-proto:Demo 項目的 gRPC proto 文件
  • grpc-server:Spring Boot 中的 gRPC 服務器項目
  • grpc-client:Spring Boot 中的 gRPC 客戶端項目

4 grpc-proto 項目

syntax = "proto3";

package com.imertyildiz.grpcproto;

option java_multiple_files = true;

message HelloWorldRequest{
    string requestMessage = 1;
    string clientName = 2;
}

message HelloWorldResponse{
    string responseMessage = 1;
}

service HelloWorldService {
    rpc HelloWorld(HelloWorldRequest) returns (HelloWorldResponse);
}

這里創建了一個簡單的 .proto 文件,包括服務、方法和消息定義。

使用 protobuf-maven-plugin 將服務器和客戶端代碼生成集成到 Maven 構建系統中。

<plugin>
 <groupId>org.xolstice.maven.plugins</groupId>
 <artifactId>protobuf-maven-plugin</artifactId>
 <version>${protobuf-maven-plugin.version}</version>
 <configuration>
  <protocArtifact>
   com.google.protobuf:protoc:${protoc.version}:exe:${os.detected.classifier}</protocArtifact>
  <pluginId>grpc-java</pluginId>
  <pluginArtifact>
   io.grpc:protoc-gen-grpc-java:${io.grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
 </configuration>
 <executions>
  <execution>
   <id>client-code-generation</id>
   <goals>
    <goal>compile</goal>
   </goals>
  </execution>
  <execution>
   <id>server-code-generation</id>
   <goals>
    <goal>compile-custom</goal>
   </goals>
  </execution>
 </executions>
</plugin>

結果是,當項目通過 mvn package 命令編譯時,服務器和客戶端代碼都會生成。

但是,我們應該將項目 JAR 安裝到本地 Maven 倉庫中,以便 grpc-client 和 grpc-server 項目可以包含此項目 JAR。

因此,我們應該調用 mvn install 命令。

mvn install 后生成的源代碼mvn install 后生成的源代碼

我們將在 grpc-server 和 grpc-client 項目中使用的服務和請求對象已創建并安裝在本地 Maven 倉庫中。

5 grpc-server 項目

使用 grpc-spring-boot-starter 的服務器庫,它通過注解簡化了客戶端和服務器的定義。下面是 proto 項目和 starter 庫的一部分 pom.xml。

<dependency>
    <groupId>net.devh</groupId>
    <artifactId>grpc-server-spring-boot-starter</artifactId>
    <version>2.14.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>com.imertyildiz</groupId>
    <artifactId>grpcproto</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </dependency>

該庫在應用程序啟動時啟動 gRPC 服務器,并監聽端口:9090(默認值)。如果我們想更改端口,可以通過 application.properties 文件更改,例如:grpc.server.port=8000。

當我們為擴展自動生成的 gRPC 服務定義的類使用 @GrpcService 注解時,該庫會將服務注冊到 gRPC 服務器上。

下面是實現代碼:

package com.imertyildiz.grpcserver.Service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.imertyildiz.grpcproto.HelloWorldRequest;
import com.imertyildiz.grpcproto.HelloWorldResponse;
import com.imertyildiz.grpcproto.HelloWorldServiceGrpc;

import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;


@GrpcService
public class GreeterServer extends HelloWorldServiceGrpc.HelloWorldServiceImplBase {
    private static final Logger logger = LoggerFactory.getLogger(GreeterServer.class);

    @Override
    public void helloWorld(HelloWorldRequest request, StreamObserver<HelloWorldResponse> responseObserver) {
        HelloWorldResponse setResponseMessage = HelloWorldResponse.newBuilder()
                .setResponseMessage("Hello " + request.getClientName() + " !!!").build();
        logger.info(String.format("%1s sent a message: %1s", request.getClientName(),request.getRequestMessage()));
        responseObserver.onNext(setResponseMessage);
        responseObserver.onCompleted();
    }

}

由于此 POC 只記錄了來自請求的客戶端名稱,因此服務器只是記錄了傳入消息。

6 grpc-client 項目

同樣,使用 grpc-spring-boot-starter 的客戶端庫。我們通過 @GrpcClient("grpc-server") 定義 gRPC 客戶端。該注解帶有命名目標服務器的參數。我們應該在 application.properties 文件中配置目標服務器地址。創建的文件如下所示:

grpc.client.grpc-server.address=static://localhost:8000
grpc.client.grpc-server.negotiation-type=plaintext
grpc.server.port=8001

@GrpcClient 注解中的目標服務器名稱參數在這里用于配置地址和端口信息。

客戶端代碼如下:

package com.imertyildiz.grpcclient.Service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.imertyildiz.grpcproto.HelloWorldRequest;
import com.imertyildiz.grpcproto.HelloWorldResponse;
import com.imertyildiz.grpcproto.HelloWorldServiceGrpc.HelloWorldServiceBlockingStub;

import net.devh.boot.grpc.client.inject.GrpcClient;

@Service
public class GreeterClient {
    private static final Logger logger = LoggerFactory.getLogger(GreeterClient.class);

    @GrpcClient("grpc-server")
    private HelloWorldServiceBlockingStub helloWorldServiceStub;

    public void sayHello(String sender, String message) {
        HelloWorldRequest helloWorldRequest = HelloWorldRequest.newBuilder().setClientName(sender)
                .setRequestMessage(message).build();
        HelloWorldResponse helloWorldResponse = this.helloWorldServiceStub.helloWorld(helloWorldRequest);
        logger.info(String.format("Server sent a response: %1s", helloWorldResponse.getResponseMessage()));
    }

}

在我們為自動生成的服務注釋 BlockingStub 對象之后,它就可以使用了。我們發送消息并獲取響應,然后記錄響應。

從主函數中觸發請求函數。代碼如下:

@SpringBootApplication
public class GrpcClientApplication {

 public static void main(String[] args) {
  ApplicationContext applicationContext = SpringApplication.run(GrpcClientApplication.class, args);
  GreeterClient greeterClientService = applicationContext.getBean(GreeterClient.class);
  greeterClientService.sayHello("Client", "Hello Server !!!");
 }
}

我們來看看結果:

首先啟動了服務器,然后啟動了客戶端。結果如下:

gRPC 服務器的日志gRPC 服務器的日志

gRPC 客戶端的日志gRPC 客戶端的日志

總的來說,本文創建了簡單的 Demo 項目,展示了在 Spring Boot、Java 中 gRPC 客戶端和服務器的實現和通信,以及通過 protobuf 編譯器生成客戶端和服務器代碼的單獨 proto 項目。

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2024-04-16 12:00:14

API系統

2023-08-14 09:00:00

APIgRPCREST

2023-03-10 15:03:37

Web 應用程序API開發

2023-03-16 18:04:00

APIWeb 應用程序開發

2022-08-02 19:03:19

RestAPI集成

2023-05-11 12:40:00

Spring控制器HTTP

2021-09-13 05:02:49

GogRPC語言

2022-03-29 10:36:32

技術架構微服務

2023-11-26 09:10:34

WebSocketgreeting?在線用戶

2018-12-03 08:00:00

微服務gRPC

2023-10-27 12:36:37

gRPCKubernetes

2023-10-17 08:08:37

Dubbo服務注冊中心

2022-02-08 17:07:54

Spring BooSpring Aop日志記錄

2023-10-25 12:23:15

ProtobufgRPC

2023-03-02 07:20:10

GRPC服務健康檢查協議

2009-06-15 16:23:39

Eclipse中使用SEclipse RCP

2014-01-07 14:39:26

Android開發RxJavaREST

2024-12-03 08:00:00

2022-07-26 16:54:08

QuartzJava

2023-04-03 17:43:47

gRPCOpenFeign微服務
點贊
收藏

51CTO技術棧公眾號

亚洲视频中文字幕| 久久国产精品99国产| 日韩一级欧美一级| 91精品国产91久久久久麻豆 主演| 欧日韩在线视频| 人人狠狠综合久久亚洲| 欧美另类暴力丝袜| 91视频在线网站| 人人爱人人干婷婷丁香亚洲| 欧美日韩国产在线看| 亚洲精品在线观看免费| 亚洲经典一区二区三区| 三级不卡在线观看| 欧美高清一级大片| a一级免费视频| 激情亚洲另类图片区小说区| 欧美精品九九99久久| 国产成人精品视频免费看| 国产精品一卡二卡三卡| 久久久久久免费毛片精品| 91在线短视频| 亚洲网站在线免费观看| 国产欧美91| 欧美激情一区二区久久久| 日韩av片在线| 久久av免费| 亚洲成人激情在线| 性久久久久久久久久久久久久| 欧美精品总汇| 欧美日韩国产一区中文午夜| 日韩精品手机在线观看| 伊人免费在线| 91在线观看视频| av色综合网| 国产裸体无遮挡| 奇米精品一区二区三区四区| 欧美资源在线观看| 国产成人在线播放视频| 在线观看一区| 久久人人爽人人| 欧美激情国产精品免费| 在线国产一区二区| 色偷偷噜噜噜亚洲男人的天堂| 国产毛片久久久久久久| 久久99国产精品视频| 日韩av在线一区二区| 无码人妻一区二区三区精品视频 | 色就色 综合激情| 免费国产黄色网址| 日韩深夜视频| 欧美性精品220| 国内自拍在线观看| 三级在线看中文字幕完整版| 粉嫩av一区二区三区免费野| 北条麻妃在线视频观看| 污污污污污污www网站免费| 久久精品无码一区| 欧美国产极品| 亚洲精品国产精品自产a区红杏吧| 日本黄色一级网站| 国产成人久久精品一区二区三区| 欧美日韩国产一级片| 精品av久久707| 国产精品嫩草影视| 中文字幕一区图| 精品久久久久久久久久久久包黑料 | 国产欧美久久一区二区| 亚洲综合免费视频| 国产在线观看免费一区| 99久久无色码| 亚洲 美腿 欧美 偷拍| 久久一区二区三区四区| 日产精品一线二线三线芒果| 国产一区精品| 国产精品三级久久久久三级| 最近中文字幕免费mv| 亚洲91av| 疯狂做受xxxx欧美肥白少妇| 久久午夜夜伦鲁鲁一区二区| 91国产一区| 日韩女优毛片在线| 中文乱码人妻一区二区三区视频| 夜色77av精品影院| 日韩在线国产精品| 久久久国产精品黄毛片| 99精品欧美| 国产精品视频内| 亚洲AV午夜精品| wwww国产精品欧美| 成年人黄色在线观看| 波多野结衣在线观看| 欧美性videos高清精品| 亚洲精品www.| 牛牛精品成人免费视频| 色狠狠久久aa北条麻妃| 久久精品免费av| 日韩激情视频在线观看| 91视频免费在线观看| 全色精品综合影院| 亚洲欧美日韩久久精品| 粗暴91大变态调教| 日韩精品一区国产| 亚洲深夜福利网站| 少妇影院在线观看| 喷白浆一区二区| 国产精品视频免费观看| 91精品专区| 婷婷成人综合网| 污污网站免费看| 清纯唯美亚洲经典中文字幕| 久久精品电影网站| 男人天堂av在线播放| 国产精品66部| 亚洲免费视频一区| 欧美成人资源| 亚洲第一av网| 小早川怜子一区二区的演员表| 中文一区在线| 岛国一区二区三区高清视频| 最新av网站在线观看 | 欧美日本国产在线| 中文字幕免费播放| 久久亚洲欧美国产精品乐播| 国产内射老熟女aaaa| 美女久久久久久| 亚洲少妇激情视频| 日本韩国欧美中文字幕| 国产成人午夜高潮毛片| 亚洲自拍的二区三区| 男人最爱成人网| 亚洲国产欧美在线成人app| 国产午夜手机精彩视频| 久久99精品视频| 视频在线精品一区| 日韩欧美一区二区三区在线观看 | 蜜桃伊人久久| 国产精选一区二区| 波多野结衣精品| 日韩一区二区在线看| 三级黄色免费观看| 九九视频精品免费| 一区二区三区四区视频在线观看 | 国产又粗又猛又爽又黄av| 亚洲尤物精选| 欧美高清视频一区| 都市激情亚洲一区| 亚洲欧美精品中文字幕在线| 国产成人在线观看网站| 久久亚洲影视婷婷| 无码人妻丰满熟妇区毛片| 奇米亚洲欧美| 国产美女精品视频免费观看| 欧美69xxx| 日韩欧美国产综合在线一区二区三区| 欧美极品视频在线观看| 高清不卡一区二区在线| 免费超爽大片黄| 欧美美女在线直播| 国产精品96久久久久久| 日韩伦理在线观看| 日韩一卡二卡三卡| 香蕉免费毛片视频| 久久久精品国产免大香伊| 91在线视频观看免费| 视频在线不卡免费观看| 成人xxxxx色| 在线看片国产福利你懂的| 亚洲深夜福利网站| 国产伦精品一区二区三区四区| 亚洲激情成人在线| 538国产视频| 麻豆精品久久精品色综合| 69视频免费看| 懂色av中文字幕一区二区三区| 野外做受又硬又粗又大视频√| 乱中年女人伦av一区二区| 欧美在线激情视频| √天堂资源地址在线官网| 91精品国产综合久久福利| 精品一区二区三区四| 日本亚洲一区二区| 98精品国产高清在线xxxx天堂| 色窝窝无码一区二区三区| 精品久久香蕉国产线看观看亚洲 | 在线电影院国产精品| av成人免费网站| 99精品一区二区| 日本xxxx黄色| 国内久久视频| 亚洲三级 欧美三级| 天天干,天天干| 亚洲女人的天堂| 四虎永久免费影院| 国产在线视频精品一区| 免费 成 人 黄 色| 天天综合国产| 久久久精彩视频| 国产免费区一区二区三视频免费| 91av在线看| 二区三区四区高清视频在线观看| 亚洲国产三级网| 国产精品自拍电影| 日韩欧美在线中文字幕| 免费视频网站www| 国产精品嫩草影院com| 小毛片在线观看| 国产一区二区三区精品视频| 丁香啪啪综合成人亚洲| 在线成人h网| 神马午夜伦理影院| 欧美日韩色图| 久久伊人一区| 哺乳挤奶一区二区三区免费看| 国产精品永久在线| 黄色综合网址| 午夜精品一区二区三区在线| 宅男在线观看免费高清网站| 中文字幕日韩欧美在线| 天天干天天做天天操| 日韩三级中文字幕| 国产精品乱码久久久| 欧美色窝79yyyycom| 亚洲精品中文字幕乱码三区91| 亚洲一区二区在线视频| 26uuu成人网| 国产精品第四页| 亚洲最大成人综合网| 久久中文字幕电影| 久久人妻少妇嫩草av无码专区| 国产99久久久国产精品| 香蕉视频色在线观看| 六月丁香婷婷色狠狠久久| 青青在线免费观看视频| 久久99伊人| 久草资源站在线观看| 国产精品日本欧美一区二区三区| 青青在线免费观看| 亚洲国产清纯| 国产乱子伦农村叉叉叉| 9久re热视频在线精品| 国产精品久久久久久久久电影网| 欧美aaaa视频| 正在播放国产精品| 国产精品久久久久无码av| 亚洲人成77777| 久久综合国产| www.99riav| 在线成人亚洲| 黄色免费观看视频网站| 国产无码精品在线播放| 色呦呦在线视频| 日韩欧美高清dvd碟片| 国产熟女一区二区丰满| 日韩三级av在线播放| www.精品视频| 精品国产乱码久久久久久久 | 精品日本一线二线三线不卡| 动漫av一区二区三区| 亚洲国产日韩欧美在线99| 五月婷在线视频| 亚洲欧美国产另类| 91激情在线| 久久99久久久久久久噜噜| av在线不卡免费| 热re99久久精品国产66热| 日本中文字幕一区二区| 国产一区二区丝袜高跟鞋图片| 国产精品一区二区精品视频观看 | 日韩有码第一页| 亚洲欧洲成视频免费观看| av网站无病毒在线| 精品国产自在精品国产浪潮| 青青青草视频在线| 日韩免费中文字幕| 国产一区二区三区免费观看在线| 亚洲一区免费网站| 都市激情亚洲| 视频在线99| 合欧美一区二区三区| 国产精品沙发午睡系列| 久久精品国产精品亚洲精品| 97精品人人妻人人| 国产欧美精品一区二区三区四区| 国产精品三区在线观看| 欧美日韩亚洲精品一区二区三区| 依依成人在线视频| 亚洲国产精品小视频| 日本高清在线观看wwwww色| 97国产一区二区精品久久呦| 成人免费一区| 国产精品区一区| 欧美国产一级| 两根大肉大捧一进一出好爽视频| 久久激情五月婷婷| 亚洲国产精品无码久久久久高潮| 国产精品色在线观看| 成人毛片18女人毛片| 91精品国产综合久久小美女| 欧美日韩国产中文字幕在线| 欧美成人全部免费| av高清一区| 国产在线一区二区三区欧美| 91亚洲国产| 青青青国产在线视频| 成人自拍视频在线| 国产精品久久一区二区三区| 日韩mv欧美mv国产网站| 亚洲免费视频播放| 美女国产精品| 精品久久久久久无码人妻| 中文字幕乱码久久午夜不卡| 日韩精品视频播放| 91精品国产一区二区三区香蕉 | 高清免费成人av| 国产专区欧美专区| 五月综合久久| 日韩久久久久久久久久久久| 免费国产亚洲视频| 欧美亚一区二区三区| 亚洲一区二区三区四区在线免费观看| 中文天堂在线视频| 亚洲美女视频网站| 黄在线观看免费网站ktv| 91精品国产91久久久久青草| 日韩久久综合| 国产自偷自偷免费一区 | 久久精品99久久| 亚洲无毛电影| 不卡的一区二区| 亚洲精品免费在线| 国产欧美综合视频| 久久久www成人免费精品| 狂野欧美性猛交xxxx| 亚洲欧洲国产精品久久| 七七婷婷婷婷精品国产| 精品国产免费观看| 欧美日韩国产精品成人| 久久这里精品| 欧美亚洲一级片| 欧美交a欧美精品喷水| www精品久久| 成人高清视频在线观看| 免费在线视频一区二区| 欧美不卡视频一区| 欧美卡一卡二| 国产精品日韩欧美一区二区| 亚洲国产激情| 欧美亚洲视频在线观看| 精品欧美午夜寂寞影院| 日韩a∨精品日韩在线观看| 成年人网站91| 成人午夜视频在线播放| 亚洲国产第一页| 在线天堂中文资源最新版| 日本一区二区不卡高清更新| 免费高清不卡av| 中文字幕av免费在线观看| 亚洲成人国产精品| 成人福利视频| 亚洲欧洲三级| 福利一区二区在线观看| 伊人久久综合视频| 亚洲午夜未删减在线观看 | 欧美日韩天堂| 亚洲av永久无码精品| 欧美午夜丰满在线18影院| 蝌蚪视频在线播放| 国产精品视频地址| 欧美天天在线| v8888av| 欧美另类变人与禽xxxxx| 日韩三级电影视频| 久久久久久亚洲精品不卡4k岛国| 日韩黄色小视频| 日韩成人短视频| 日韩国产一区三区| 精品女同一区二区三区在线观看| 国产香蕉一区二区三区| 97国产一区二区| ,一级淫片a看免费| 久久久久女教师免费一区| 中文字幕伦av一区二区邻居| 九热视频在线观看| 一区二区三区波多野结衣在线观看| 天堂在线视频网站| 国产欧美日韩精品在线观看| 国产精品草草| jizz日本在线播放| 亚洲第一级黄色片| 婷婷成人av| www黄色日本| 亚洲免费在线播放| 精品亚洲综合| 国产一区二区视频在线免费观看| 日韩av在线播放中文字幕| 中文在线观看免费网站| 中文字幕日韩av综合精品| 日本亚洲不卡| 欧美图片自拍偷拍| 欧美二区乱c少妇|