当前位置: 首页 > news >正文

Springboot之接入gRPC

1、maven依赖

<properties><!-- grpc --><protobuf.version>3.5.1</protobuf.version><protobuf-plugin.version>0.6.1</protobuf-plugin.version><grpc.version>1.42.1</grpc.version><os-maven-plugin.version>1.6.0</os-maven-plugin.version>
</properties><!-- grpc -->
<dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>${grpc.version}</version>
</dependency>
<dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>${grpc.version}</version>
</dependency>
<dependency><groupId>io.grpc</groupId><artifactId>grpc-netty</artifactId><version>${grpc.version}</version>
</dependency>

2、编译环境构建

<build><extensions><!-- os-maven-plugin --><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>${os-maven-plugin.version}</version></extension></extensions><plugins><!-- protobuf-maven-plugin --><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>${protobuf-plugin.version}</version><configuration><protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact><!--默认值--><protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot><outputDirectory>${project.basedir}/src/main/java</outputDirectory><!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件--><clearOutputDirectory>false</clearOutputDirectory></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>

3、添加proto文件

在src/java同级添加proto文件夹,内部添加proto文件

修改java_package,生成包路径

syntax = "proto3";option java_multiple_files = true;
option java_package = "com.bhl.biz.grpc";package media_broker;// The service definition.
service MediaBroker {rpc open(MediaObject) returns (MediaStatus) {};rpc fetchFrame(MediaObject) returns (FrameObject) {};rpc fetchImage(MediaObject) returns (ImageObject) {};rpc close(MediaObject) returns (MediaStatus) {};
}message MediaObject {string address = 1;
}message MediaStatus {bool status = 1;string message = 2;
}

4、生成代码

依次执行protobuf:compile、compile-custom

随后生成对应代码文件

5、注册grpc

官方参考demo

https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldClient.java

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;private ManagedChannel channel;
private MediaBrokerGrpc.MediaBrokerBlockingStub blockingStub;void init(){// 127.0.0.1 50051channel = ManagedChannelBuilder.forAddress(grpcConfig.getHost(), grpcConfig.getPort()).usePlaintext().build();blockingStub = MediaBrokerGrpc.newBlockingStub(channel);
}

核心文件 MediaBrokerGrpc

三种通信方式

6、发送请求

请求为已注册的服务

// 请求对象
MediaObject object = MediaObject.newBuilder().setAddress(address).build();
// 发送请求
MediaStatus status = blockingStub.open(object);
log.info(status.toString());
boolean result = status.getStatus();

http://www.lryc.cn/news/301353.html

相关文章:

  • 2023年中国数据智能管理峰会(DAMS上海站2023):核心内容与学习收获(附大会核心PPT下载)
  • DS:八大排序之堆排序、冒泡排序、快速排序
  • Sora:继ChatGPT之后,OpenAI的又一力作
  • 阅读笔记(BMSB 2018)Video Stitching Based on Optical Flow
  • Ubuntu学习笔记-Ubuntu搭建禅道开源版及基本使用
  • 《苍穹外卖》知识梳理6-缓存商品,购物车功能
  • [NSSCTF]-Web:[SWPUCTF 2021 新生赛]easy_sql解析
  • vue3 codemirror yaml文件编辑器插件
  • 力扣经典题:环形链表的检测与返回
  • 【web | CTF】BUUCTF [BJDCTF2020]Easy MD5
  • spring boot Mybatis Plus分页
  • elementui 中 el-date-picker 控制选择当前年之前或者之后的年份
  • GlusterFS:开源分布式文件系统的深度解析与应用场景实践
  • 第6个-滚动动画
  • 配置oracle连接管理器(cman)
  • [N-142]基于springboot,vue停车场管理系统
  • DAY53:动态规划(买股票的最佳时机)
  • 快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码
  • 外汇110:外汇做空是什么意思?如何运作?一文读懂
  • 【记录】个人博客或笔记中的数学符号设定
  • Redis Sentinel工作原理
  • GEE入门篇|遥感专业术语:理论介绍
  • react中如何做到中断diff过程和恢复
  • python:PyPDF2 从PDF文件中提取目录
  • Java 2:运算符、表达式和语句
  • 批量提取word文件中文本框内容的三种方法
  • Leecode之合并两个有序链表
  • 陶建国教授谈中西方文化的差异与交融
  • Ps:画笔选项
  • 嵌入式——Flash(W25Q64)