grpc整合Springboot

news/2025/1/20 16:02:02/

一、grpc的依赖

    <dependencies><dependency><groupId>net.devh</groupId><artifactId>grpc-server-spring-boot-starter</artifactId><version>2.9.0.RELEASE</version></dependency></dependencies><build><extensions><extension><groupId>kr.motd.maven</groupId><artifactId>os-maven-plugin</artifactId><version>${os.plugin.version}</version></extension></extensions><plugins><plugin><groupId>org.xolstice.maven.plugins</groupId><artifactId>protobuf-maven-plugin</artifactId><version>${protobuf.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:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact></configuration><executions><execution><goals><goal>compile</goal><goal>compile-custom</goal></goals></execution></executions></plugin></plugins></build>
</project>

二、proto的编写

syntax = "proto3";option java_multiple_files = true;
option java_package = "com.ut.msfw1a.services.openapiservice.proto";//生成代码的位置service EventInfoService {rpc sendMessageEvent(EventInfoMessage) returns (EventInfoResponse) {}
}message EventInfoMessage {string commonInfo = 1;string flag =2;string data = 3;
}message EventInfoResponse {string msg = 1;
}

存放的位置和java同级
请添加图片描述

三、运行这两个插件

(如果出现报错,可能是因为电脑没有安装protobuf的命令,需要提前安装并配置环境变量)
请添加图片描述

四、生成的文件

生成的文件根据写的proto生成,可以把生成的文件挪到项目中,也可以就放在target
在这里插入图片描述

五、实现类的编写

@GrpcService
public class EventInfoServiceGrpcImpl extends EventInfoServiceGrpc.EventInfoServiceImplBase {@Overridepublic void sendMessageEvent(EventInfoMessage request, StreamObserver<EventInfoResponse> responseObserver) {EventInfoResponse.Builder eventInfo = EventInfoResponse.newBuilder();//业务处理String msg = request.getMsg();String msg = request.getCommonInfo();//if ("success".equals(msg)){eventInfo.setCode(200).setMsg("success"+100000).setSuccess(true);eventInfo.setMsg("success"+100000);}else{eventInfo.setCode(500).setMsg("error"+100000).setSuccess(false);eventInfo.setMsg("error"+100000);}responseObserver.onNext(eventInfo.build());

六、客户端调用测试(Python)

  1. 将proto文件放到本地的一个文件夹,然后执行python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. pb.proto
  2. 会生成下面的文件

在这里插入图片描述
3. 编写测试脚本

import grpc
import pb_pb2  # 从生成的 proto 文件中导入生成的类
import pb_pb2_grpc  # 从生成的 proto 文件中导入生成的服务def run():channel = grpc.insecure_channel('localhost:7778')  # 连接到 gRPC 服务器stub = pb_pb2_grpc.EventInfoServiceStub(channel)# 创建消息pb_message = pb_pb2.EventInfoMessage()pb_message.msg = "success"# 调用服务方法response = stub.sendMessageEvent(pb_message)print("Response received:")print("Code:", response.code)print("Message:", response.msg)print("Success:", response.success)if __name__ == '__main__':run()
  1. 运行python test_grpc.py
  2. 成功返回结果

http://www.ppmy.cn/news/1053542.html

相关文章

如何搭建Appium工具环境

1、安装Java Development Kit&#xff08;JDK&#xff09; 前往Oracle官网下载JDK。 在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到最新版本的JDK。根据操作系统选择适合的版本&#xff0c;并根据指示下载安装程序。 安装JDK。运行下载的安装…

nginx-location正则

一 Nginx的location语法 location [||*|^~] /uri/ { … } 严格匹配。如果请求匹配这个location&#xff0c;那么将停止搜索并立即处理此请求~ 区分大小写匹配(可用正则表达式)~* 不区分大小写匹配(可用正则表达式)!~ 区分大小写不匹配!~* 不区分大小写不匹配^~ 如果把这个前缀…

u盘数据丢失但占内存如何恢复?不要着急,这里有拯救方案

U盘数据丢失但占内存如何恢复&#xff1f;数据丢失是一种让人非常头疼的问题&#xff0c;尤其是当我们的U盘数据丢失了&#xff0c;但内存仍然被占用时&#xff0c;更令人困惑和焦虑。然而&#xff0c;不要慌张&#xff01;在本文中&#xff0c;将为大家介绍一些有效的方法来恢…

关于python如何使用sqlalchemy连接sap_hana数据库

1.先安装sqlalchemy pip install sqlalchemy 2.from sqlalchemy import create_engine 3.创建数据库连接方式&#xff1a; 假设数据连接方式如下&#xff1a; usernameH_TEOPT passwordww122222 jdbcUrljdbc:sap://192.163.1.161:21681/?currentschema 那么使用sqlalchemy 的…

JDBC查数据

目录 BaseDao UserDao impl 项目目录 BaseDao package com.hz.dao;import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java…

模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)

模型预测 一、导入关键包二、如何载入、分析和保存文件三、修改缺失值3.1 查看缺失值3.1 众数3.2 平均值3.3 中位数3.4 0填充3.5 KNN填充 四、修改异常值4.1 删除4.2 替换4.3 3σ原则4.4 箱型图 五、数据绘图分析5.1 饼状图5.1.1 绘制某一特征的数值情况&#xff08;二分类&…

TCP滑动窗口

为什么会有滑动窗口 在计算机网络中&#xff0c;数据通常被分成小块&#xff08;也叫数据段&#xff09;在网络中传输&#xff08;为什么会被分成小块&#xff0c;请了解拥塞窗口和流量控制&#xff09;。这些小块可能会在传输的过程中遇到延迟、丢失或乱序等问题。为了保证数据…

嵌入式常用的算法

嵌入式系统广泛应用于各种领域&#xff0c;如汽车、医疗、物联网、航空航天等&#xff0c;因此有许多常用的算法被用于嵌入式系统开发。以下是一些常见的嵌入式系统算法&#xff1a; 数字信号处理算法&#xff1a;包括数字滤波器、FFT、DWT、数字锁相环等。 压缩算法&#xff…