写给Java程序员的GRPC入门系列(1)

news2024/11/18 23:42:40

点击上方GRPC专栏看系列

文章目录

  • Abstract
  • 前置依赖
  • 本文
    • 初始状态
    • 创建MAVEN module
    • 修改依赖
    • 测试
  • 下一步

Abstract

网上有很多GRPC的例子,但是却没有能够写给普通Java开发人员手把手入门少走弯路的教程。
本教程保证按照步骤一步步来你就可以完成GRPC从0到1的构建。
源码地址:grpc-helloworld-for-java

前置依赖

装有maven和JDK。并且保证javac命令可用。

本文

本文是系列的第一篇,将从0构建MAVEN项目引入相关依赖。 代码在分支:step1-import-mvn。

初始状态

git clone https://github.com/gaoxingliang/grpc-helloworld-for-java.git
git checkout step-0-empty

可以看到没有任何代码,下面我们将一步步引入相关依赖构建。
在这里插入图片描述

创建MAVEN module

在这里插入图片描述

在这里插入图片描述

修改依赖

修改pom.xml 加入如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
    <artifactId>grpcExample</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>

        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.16.3</version>
        </dependency>

        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>1.15.1</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.15.1</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.15.1</version>
        </dependency>
        <dependency> <!-- necessary for Java 9+ -->
            <groupId>org.apache.tomcat</groupId>
            <artifactId>annotations-api</artifactId>
            <version>6.0.53</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>


    <build>
        <defaultGoal>clean generate-sources compile install</defaultGoal>

        <plugins>
            <!-- compile proto file into java files. -->
            <plugin>
                <groupId>com.github.os72</groupId>
                <artifactId>protoc-jar-maven-plugin</artifactId>
                <version>3.11.4</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <includeMavenTypes>direct</includeMavenTypes>

                            <inputDirectories>
                                <include>src/main/resources</include>
                            </inputDirectories>

                            <!-- 用这个来指定不同的package依赖。 -->
                            <includeDirectories>
                                <include>src/main/resources</include>
                            </includeDirectories>

                            <outputTargets>
                                <outputTarget>
                                    <type>java</type>
                                    <outputDirectory>src/main/java</outputDirectory>
                                </outputTarget>
                                <outputTarget>
                                    <type>grpc-java</type>
                                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.15.0</pluginArtifact>
                                    <outputDirectory>src/main/java</outputDirectory>
                                </outputTarget>
                            </outputTargets>
                        </configuration>
                    </execution>
                </executions>
            </plugin>


            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

这里面主要有2部分,

  • dependencies 指定grpc相关依赖。
  • build指定了默认的目标和引入了protoc相关插件。inputDirectories指定去扫描哪些proto文件。includeDirectories指定了哪些依赖包。 后面我们会构建一个带有多个proto文件包引用的例子来模拟更真实的调用。

测试

cd grpcExample
mvn

会看到如下结果: 代表第一步maven依赖已经完成。
在这里插入图片描述我们第一部分代码完成,代码分支:step1-import-mvn在这里插入图片描述

下一步

下一篇中,我们会编写测试proto文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125094.html

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

相关文章

一文读懂机器学习常用算法的基本概念和适用场景

引用一句英国统计学家George E. P. Box的名言&#xff1a;All models are wrong, but some are useful. 没有哪一种算法能够适用所有情况&#xff0c;只有针对某一种问题更有用的算法。 机器学习算法不会要求一个问题被 100%求解&#xff0c;取而代之的是把问题转化为最优化的…

基于小程序技术栈的跨端框架有哪些?

回顾过去的几年&#xff0c;市场上的跨端开发框架一直在迭代&#xff0c;同时也有新的跨端框架冒出来。在过往的文章中&#xff0c;我们也有盘点过基于HTML5语法实现的跨端开发平台。在本篇文章中&#xff0c;就让我们盘点一下以小程序语法进行转译的跨端平台&#xff0c;以及他…

相机标定笔记(1) -- 相机模型

什么需要相机标定 我们知道&#xff0c;相机的图像是三维世界到2D平面的一个投影。仅从这个2D图像来看&#xff0c;我们无法得知图像中的物体在真实物理世界中有多大&#xff0c;距离相机的距离有多远。那么我们有没有办法从这个2D的图片结合相机的参数获得这些信息呢&#xff…

ElasticSearch-全文检索

docker 下载安装 #es镜像 docker pull elasticsearch:7.4.2 #es的可视化工具 docker pull kibana:7.4.2mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/dataecho "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsear…

2023年北京/成都/南宁山东DAMA-CDGA/CDGP数据治理工程师认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

制造业ERP软件如何破解企业质量管理难题?

随着生产制造企业的快速发展&#xff0c;产品的好坏&#xff0c;在很大程度上取决于产品制造的质量管理水平&#xff0c;其水平的高低直接对应产品的竞争力。许多企业都面临着质量管控能力不足、质量检验数据记录不全、部分物料追溯困难等问题&#xff0c;一旦企业的产品出现质…

异步请求池的实现

异步请求池 两种请求模式 pipline请求&#xff1a;A在一个连接上打包多个请求发送给B&#xff0c;B将这些请求的结果打包返回异步请求&#xff1a;A一个连接一个请求&#xff0c;并创建一个线程检查发送的所有请求是否有结果返回&#xff08;借助epoll&#xff09;&#xff0…

F280049C Buffered Digital-to-Analog Converter (DAC)

目录DAC15.1 Introduction15.1.1 Features15.1.2 Block Diagram15.2 Using the DAC15.2.1 Initialization Sequence 初始化顺序15.2.2 DAC Offset AdjustmentDAC偏移调整15.2.3 EPWMSYNCPER Signal EPWMSYNCPER信号15.3 Lock Registers总结代码配置 driverlib代码配置 bitfield…

Blender和C4D有哪些不同?选Blender还是C4D?

众所周知&#xff0c;Blender和Cinema 4D是美术界最著名的两个名字。在比较这两款软件的时候&#xff0c;我们要仔细的看不同的方面。因此&#xff0c;您如何知道使用哪一个以及每个的关键方面是什么&#xff0c;例如渲染、建模、社区等等&#xff01;Cinema 4D 是那些希望在电…

Doris(五)-监控、报警、优化、数据备份及恢复

目录1、监控和报警1.1、Prometheus1.2、Grafana2、优化2.1、查看 QueryProfile2.1.1、使用方式2.1.2、参数说明2.1.3、调试方式2.2、 Join Reorder2.2.1 原理2.2.2 示例2.3 Join 的优化原则2.4 导入导出性能优化2.4.1 FE 配置2.4.3 性能分析2.4.4 Broker 导入大文件2.5 Bitmap …

sharepoint 配置app id secret 用postman上传文件

配置APP ID 第一部是配置APPID&#xff0c;可以访问 https://{tenantName}.sharepoint.com/_layouts/15/appregnew.aspx 或者访问具体某个页面下的 https://{tenantName}.sharepoint.com/sites/testUpload/_layouts/15/appregnew.aspx 点击生成即可生成客户端的id和secret ti…

kubernetes控制器之StatefulSet

目录 一、无状态与有状态 1.1无状态 1.2有状态 二、StatefulSet 控制器 2.1 StatefulSet 控制器概述 2.2StatefulSet 控制器&#xff1a;网络标识 2.3StatefulSet 控制器&#xff1a;独享存储 一、无状态与有状态 Deployment控制器设计原则&#xff1a; 管理的所有Pod一…

TiDB丨Etcd API 未授权访问漏洞的修复

文章目录一、前言二、集群环境三、漏洞整改建议方案一方案二四、方案实施五、可能存在的风险六、总结一、前言 Etcd是一个采用HTTP协议的健/值对存储系统&#xff0c;它是一个分布式和功能层次配置系统&#xff0c;可用于构建服务发现系统。用于共享配置和服务发现的分布式&am…

KubeEdge云原生边缘计算公开课03——云原生边缘计算学术研究现状与趋势

KubeEdge云原生边缘计算公开课03——云原生边缘计算学术研究现状与趋势曹建农&#xff1a;Collaborative Edge ComputingEdge Computing: the Driven force of AIoTThe Emergence of AIoTEdge ComputingCurrent Research on Edge ComputingComputation at EdgeIntelligence at …

MCU-51:LED点阵屏

之前我们介绍了控制LED灯亮灭的操作&#xff0c;今天我们要介绍一下控制LED点阵屏亮灭的操作&#xff0c;8*8的LED点阵屏&#xff0c;可以理解为八行或者八列LED灯的一个组合&#xff0c;可以使用它来显示一些字体与图案。 一、点阵屏介绍 1.1 简介 LED点阵屏由若干个独立的…

八、购物车案例

一、购物车案例 1.1、使用npm i命令&#xff0c;安装依赖 1.2、编写页面布局 App.vue <template><div class"app-container"><Header></Header><Goods></Goods><Footer></Footer></div> </template>…

【直播教程】直播间没人看?5大技巧教你提升!

直播是连接店铺、品牌、产品和消费者之间的桥梁。人是视觉动物&#xff0c;店铺的产品、团队和服务是后端的内容&#xff0c;产品再好&#xff0c;团队再强大&#xff0c;前端的消费者看不到&#xff0c;背后的努力都是徒然。所以&#xff0c;在粉丝对店铺、对品牌不熟悉的情况…

CouchDB(1):apache CouchDB介绍与安装

1 apache CouchDB介绍 Apache的CouchDB是⼀个免费的开源的数据库。 官网&#xff1a;https://couchdb.apache.org/ 其主要特点如下&#xff1a; 1.schema free &#xff08;不需要提前设计表&#xff09;2.documented oriented &#xff0c; json structure data(⾯向⽂档)3…

openresty配置资源访问控制

openresty配置资源访问控制 介绍 我们这的需求是&#xff0c;arcgis server发布了很多图层数据&#xff0c;这些数据需要被用户申请后才能访问。申请后给用户一个地址和key&#xff0c;让用户可以用key和地址访问地图资源。 这里我准备使用openresty和认证服务&#xff08;j…

电商API接口开发系列,亲测有效,请求示例说明

在电商运营活动中&#xff0c;价格是贯穿始终的关键因素&#xff0c;而品牌方有效利用价格数据也能够推动企业更好的发展。 当品牌方能够精准获取商品的到手价时&#xff0c;有利于做好商品的定价复盘工作、后续的价格分析工作&#xff0c;也能够为后面的调价作参考&#xff1…