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

java入门 grpc测试案例

一、 参考资料

参考孙帅suns教程
https://www.bilibili.com/video/BV13M41157gU/?p=3&spm_id_from=333.880.my_history.page.click&vd_source=4cd1b6f268e2a29a11bea5d2568836ee

二、 服务端

项目目录
在这里插入图片描述
maven构建项目
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sht</groupId><artifactId>server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>server</name><url>http://maven.apache.org</url><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>io.grpc</groupId><artifactId>grpc-netty-shaded</artifactId><version>1.32.1</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-protobuf</artifactId><version>1.32.1</version></dependency><dependency><groupId>io.grpc</groupId><artifactId>grpc-stub</artifactId><version>1.32.1</version></dependency></dependencies><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>1.6.2</version></extension></extensions><plugins><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>0.6.1</version><configuration><protocArtifact>com.google.protobuf:protoc:3.12.0:exe:${os.detected.classifier}</protocArtifact><pluginId>grpc-java</pluginId><pluginArtifact>io.grpc:protoc-gen-grpc-java:1.32.1:exe:${os.detected.classifier}</pluginArtifact></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build> 
</project>

Product.proto

syntax = "proto3";option java_multiple_files = false;
option java_package = "com.sht.server.proto";
option java_outer_classname = "ProductProto";message ProductReq{string pid = 1;int32 weight = 2;
}message ProductResp{string result = 1;
}service ProductService{rpc add(ProductReq) returns(ProductResp){}
}

maven build compile编译proto文件为java文件

实现服务端服务
ProductService.java

package com.sht.server.service;import com.sht.server.proto.ProductProto;
import com.sht.server.proto.ProductProto.ProductReq;
import com.sht.server.proto.ProductProto.ProductResp;
import com.sht.server.proto.ProductProto.ProductResp.Builder;
import com.sht.server.proto.ProductServiceGrpc;import io.grpc.stub.StreamObserver;public class ProductService extends ProductServiceGrpc.ProductServiceImplBase{@Overridepublic void add(ProductReq request, StreamObserver<ProductResp> responseObserver) {System.out.println("PID:"+request.getPid());System.out.println("weight:"+request.getWeight());Builder builder = ProductProto.ProductResp.newBuilder();builder.setResult("success");ProductResp productResp =builder.build();responseObserver.onNext(productResp);responseObserver.onCompleted();}
}

对外暴露服务
App.java

package com.sht.server;import java.io.IOException;import com.sht.server.service.ProductService;import io.grpc.Server;
import io.grpc.ServerBuilder;/*** Hello world!**/
public class App 
{public static void main( String[] args ){//GRPC服务端ServerBuilder serverBuilder = ServerBuilder.forPort(9000);serverBuilder.addService(new ProductService());Server server = serverBuilder.build();try {server.start();server.awaitTermination();} catch (Exception e) {System.out.println("RPC服务异常");e.printStackTrace();}}
}

三、 客户端

调用服务
App.java

package com.sht.client;import com.sht.server.proto.ProductProto;
import com.sht.server.proto.ProductProto.ProductReq;
import com.sht.server.proto.ProductProto.ProductResp;
import com.sht.server.proto.ProductProto.ProductReq.Builder;
import com.sht.server.proto.ProductServiceGrpc;import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;/*** Hello world!**/
public class App {public static void main(String[] args) {// 创建通信管道ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 9000).usePlaintext().build();// 获得代理对象ProductServiceGrpc.ProductServiceBlockingStub productService = ProductServiceGrpc.newBlockingStub(managedChannel);//准备参数Builder builder = ProductProto.ProductReq.newBuilder();builder.setPid("xxxxxxx");builder.setWeight(123);ProductReq productReq = builder.build();//调用ProductResp response = productService.add(productReq);System.out.println("rpc调用结果:" + response.getResult());//关闭通道managedChannel.shutdown();}
}
http://www.lryc.cn/news/383057.html

相关文章:

  • 【操作系统】信号处理与阻塞函数|时序竞态问题
  • go语言day4 引入第三方依赖 整型和字符串转换 进制间转换 指针类型 浮点数类型 字符串类型
  • IOS Swift 从入门到精通:闭包第二部分,高级闭包
  • 爬虫超详细介绍
  • 双向长短期记忆神经网络BiLSTM
  • python基础篇(4):range语句
  • 基于STM32的简易计算器proteus仿真设计(仿真+程序+设计报告+讲解视频)
  • 小程序onLoad 和 onShow
  • 抖音直播违规规定有哪些?(直播违禁词汇总表)
  • 安卓 jetpack compose
  • JavaWeb系列十九: jQuery的DOM操作 上
  • JavaWeb系列十一: Web 开发会话技术(Cookie, Session)
  • 【激光雷达使用记录】—— 如何在ubuntu中利用ros自带的rviz工具实时可视化雷达点云的数据
  • 运行项目报错(java: 无效的目标发行版: 17)项目jdk版本不兼容,修改Java编译器配置
  • 一道session文件包含题
  • vuex数据持久化
  • MySQL之复制(十)
  • Spring MVC数据绑定和响应——简单数据绑定(一)默认类型数据绑定
  • 短视频平台自动化插件编写需要用到的源代码分享!
  • 安卓下载以来总是要添加maven下载地址,放在哪?
  • springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?
  • 20240626 每日AI必读资讯
  • C语言经典算法题第一题
  • 计算预卷积特征
  • Python 入门 —— 描述器
  • 测试驱动开发TDD
  • [论文笔记]Mixture-of-Agents Enhances Large Language Model Capabilities
  • Redis 7.x 系列【6】数据类型之字符串(String)
  • 指针(一)
  • harmony鸿蒙下实现bc交互的方式和方法