grpc整合Springboot

news2024/11/27 12:02:11

一、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 {

    @Override
    public 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.coloradmin.cn/o/911420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术未来论:为何校对将是AI时代的新前沿

随着信息时代的逐步深化&#xff0c;AI技术已成为全球进程中的核心动力。其深远的影响已经触及了社会的各个领域。而在这充满机器智慧的时代&#xff0c;一个古老的领域——校对&#xff0c;却意外地与AI结合&#xff0c;成为了新的技术前沿。这是为何&#xff1f; 1.信息的尊…

YOLO目标检测算法调试过程学习记录

先前已经完成过YOLO系列目标检测算法的调试过程&#xff0c;今天主要是将所有的调试加以总结 这里的conda环境就不再赘述了&#xff0c;直接使用requirement.txt文件的即可&#xff0c;也可以参考YOLOX的配置过程5 数据集处理 YOLOv5有自己的数据集格式&#xff0c;博主的数据…

面试热题(二叉树的最大路径)

路径 被定义为一条从树中任意节点出发&#xff0c;沿父节点-子节点连接&#xff0c;达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给定一个二叉树的根节点 root…

Electron学习2 使用Electron-vue和Vuetify UI库

Electron学习2 使用Electron-vue和Vuetify UI库 一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1. 关于 electron-builder2. 安装脚手架3. 运行4. 打包应用程序 四、background.js说明1. 引入模块和依赖&#xff1a;2. 注册协议&#xff1a;3. 创建窗口函数&#x…

企业内部wiki系统工具有哪些?盘点 8款最佳 Wiki 系工具

WiKi支持面向社群的协作式写作&#xff0c;同时也包括一组支持这种写作的辅助工具。有人认为&#xff0c;Wiki系统属于一种人类知识的网络系统&#xff0c;我们可以在Web的基础上对Wiki文本进行浏览、创建、更改&#xff0c;而且这种创建、更改、及发布的代价远比HTML文本小 &a…

Java“牵手”根据关键词搜索(分类搜索)lazada商品列表页面数据获取方法,lazadaAPI实现批量商品数据抓取示例

lazada商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取lazada商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问lazada商城的网页来获取商品详情信息。以下是两种常用方法的介…

通达信指标公式15:除权除息数据统计分析

#1.关于除权除息指标的介绍&#xff1a;本指标是小红牛原创指标之一&#xff0c;觉得有必要研究一下这个问题&#xff0c;所以就花时间整理一下这个指标相关内容&#xff0c;大家可以在本源码基础上&#xff0c;进一步优化自己的思路。本指标为通达信幅图指标&#xff0c;可以做…

关于通达信指标公式中,出现乱码的解决方法

★★★★★博文原创不易&#xff0c;我的博文不需要打赏&#xff0c;也不需要知识付费&#xff0c;可以白嫖学习小技巧&#xff0c;喜欢的老铁可以多多帮忙点赞&#xff0c;小红牛在此表示感谢&#xff0c;就是对作者的最大支持。愿与诸君共勉&#xff0c;悟道于股市★★★★★…

软件测试下的AI之路(1)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

手机无人直播软件,有哪些优势?

近年来&#xff0c;随着手机直播的流行和直播带货的市场越来越大&#xff0c;手机无人直播软件成为许多商家开播带货的首选。在这个领域里&#xff0c;声音人无人直播系统以其独特的优势&#xff0c;成为市场上备受瞩目的产品。接下来&#xff0c;我们将探讨手机无人直播软件给…

IO流笔记

文件基础知识 创建文件 package org.example; import org.junit.Test;import java.io.File; import java.io.IOException;public class FileCreate{public static void main(String[] args) {}Test//方式1&#xff1a;new File(Strin pathname)public void create01(){File fil…

innovus如何设置size only

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 给instance设置size only属性命令如下: dbset [dbGet top.inst.name aa/bb -p] .dontTouch sizeOk 给一个module设置size only需要foreach循环一下: foreach inst [dbGet top.…

Docker常用操作命令(二)

Docker常用操作命令(二) 11、进入容器 docker exec -it 容器名称or容器ID /bin/bash [rootzch01 ~]# docker exec -it 973ff3caff19 /bin/bash 退出容器 root973ff3caff19:/# exit 12、查看容器中的进程 docker top 容器名称or容器ID [rootzch01 ~]# docker top 973ff3c…

Sui第四轮资助:16个团队瓜分

近日&#xff0c;Sui基金会公布了第四轮开发者资助名单&#xff0c;受助项目均是集中在DeFi、支付、基础设施、游戏、预言机等领域的Sui生态项目&#xff0c;他们是从2023年7月1日之前提交的申请中选出的。在此时间之后提交的任何项目目前正在审查中。 在前三轮资助中累积发放…

魔术般的平板式扫描仪,OCR好帮手,文档数字化一键搞定

平板式扫描仪是一种常见的扫描设备&#xff0c;通常用于将纸质文档转换为数字格式&#xff08;OCR&#xff09;&#xff0c;一般的复印店和办公室等场所使用的基本上都是这种扫描仪。它由一个平坦的玻璃板和一个移动的扫描头组成。用户将纸质文档放置在平板上&#xff0c;然后通…

WebDAV之π-Disk派盘 + 一羽记帐

一羽记帐是一款真正让你体验3S极速记账的轻量级APP。针对个人记账,没有花哨冗余的功能。界面美丽、无广告、极速启动、功能全面。一羽记帐功能涵括广,基本可以满足90%人的记账需求。完全无侵入、百分百无广告,无需担心数据安全,所有的操作都不经过任何第三方。 π-Disk派盘…

Leetcode.73矩阵置零

给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean[] row new boolean[m];boolean[] col…

聚观早报 | 网龙发布EDA白皮书;日产合资旗下品牌使用东风纯电

【聚观365】8月22日消息 网龙发布EDA白皮书 日产合资公司旗下自主品牌将使用东风纯电平台 vivo Pad Air评测 辛巴818五周年专场带货GMV达22.3亿 X删除2014年12月前大多数图片和推文链接 网龙发布EDA白皮书 近日消息&#xff0c;由北京师范大学和联合国教科文组织教育信息…

vue table合并行 动态列名

需求: 1.合并行,相同数据合并 2,根据后端返回数据动态显示列名, 我这个业务需求是,每年增加一列,也就是列名不是固定的,后端返回数据每年会多一条数据,根据返回数据显示列名 实现: html <el-table v-loading"loading" :data"dataList" :span-metho…

联合索引为什么是最左匹配原则

首先索引在使用B树时&#xff0c;B树是一个排序的树&#xff0c;根据节点大小进行排序。 当使用联合索引时其结构如下如图&#xff1a; 此时如果我们要查找第二个字母为d的目标数据like ‘%d, 如果索引来查找&#xff0c;那么根节点的第二个a小于d所有从根节点向右子树查找&a…