idea构建grpc项目

这篇具有很好参考价值的文章主要介绍了idea构建grpc项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载请注明出处:

安装protocbuf插件

idea 建议下载一个 protobuf的插件, 可以有代码提示. 这里直接去pluging里搜就行了.

idea构建grpc项目

在idea的plugins中搜索proto,然后下载如下的插件就行(最多下载的那个),点击install,然后重启就可以。

gRPC项目构建

新建Maven项目并修改pom.xml

首先用IDEA新建一个maven项目

                    idea构建grpc项目

 修改pom.xml,注意这个build标签和properties标签都是最顶级标签的直接子标签。

<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.17.3:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.42.0:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

接着继续在pom.xml中添加一些,这些依赖是构造gRPC-java项目必须用到的(来自官方文档)

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty-shaded</artifactId>
  <version>1.42.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.42.0</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.42.0</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>

添加.proto文件

  proto文件用来描述rpc请求体、响应体、以及rpc提供的服务。通过插件可以根据.proto文件生成Java类。

  这里面有个非常重要的点要注意,就是proto文件存放的位置。一定要在和src/main/java源文件目录同级的proto源文件目录才可以。如下图所示:

                       idea构建grpc项目

   添加一个proto文件:helloworld.proto

syntax = "proto3"; // 协议版本

// 选项配置
option java_package = "com.chenj.protobuf";
option java_outer_classname = "RPCDateServiceApi";
option java_multiple_files = true;

// 定义包名
package com.chenj.protobuf;

// 服务接口.定义请求参数和相应结果    
service RPCDateService {
    rpc getDate (RPCDateRequest) returns (RPCDateResponse) {
    }
}

// 定义请求体
message RPCDateRequest {
    string userName = 1;
}

// 定义响应内容
message RPCDateResponse {
    string serverDate = 1;
}

根据.proto文件生成消息体类文件和XXXGrpc类文件

  使用maven命令.

     在第一步修改的pom.xml的路径下,首先执行

    mvn protobuf:compile 生成消息体类文件

                             idea构建grpc项目

 

  接着执行:

    mvn protobuf:compile-custom 生成XXXGrpc类文件

                       idea构建grpc项目

   使用maven插件, 编译.

     idea构建grpc项目

   第一个命令执行完. 在 target目录里找就行了. 第二个命令也是找就行了. 然后将生成的Java文件拷贝到你的目录里.就可以了

编写接口实现类

package com.chenj;

import com.chenj.grpc.api.RPCDateRequest;
import com.chenj.grpc.api.RPCDateResponse;
import com.chenj.grpc.api.RPCDateServiceGrpc;
import io.grpc.stub.StreamObserver;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

// RPCDateServiceGrpc.RPCDateServiceImplBase 这个就是接口.
// RPCDateServiceImpl 我们需要继承他的,实现方法回调
public class RPCDateServiceImpl extends RPCDateServiceGrpc.RPCDateServiceImplBase {
    @Override
    public void getDate(RPCDateRequest request, StreamObserver<RPCDateResponse> responseObserver) {
        //请求结果,我们定义的
        RPCDateResponse rpcDateResponse = null;
        //
        String userName = request.getUserName();
        String response = String.format("你好:%s,今天是%s.", userName,LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
        try {
            // 定义响应,是一个builder构造器.
            rpcDateResponse = RPCDateResponse.newBuilder()
                    .setServerDate(response)
                    .build();
            //int i = 10/0;
        } catch (Exception e) {
            responseObserver.onError(e);
        } finally {
            
            responseObserver.onNext(rpcDateResponse);
        }

        responseObserver.onCompleted();

    }
}

定义服务端

package com.chenj;

import io.grpc.Server;
import io.grpc.ServerBuilder;

import java.io.IOException;

public class GRPCServer {
    private static final int port = 9999;

    public static void main(String[] args) throws IOException, InterruptedException {
        //设置service端口
        Server server = ServerBuilder.forPort(port)
                .addService(new RPCDateServiceImpl())
                .build().start();
        System.out.println(String.format("GRpc服务端启动成功, 端口号: %d.", port));

        server.awaitTermination();


    }
}

定义客户端

package com.chenj;

import com.chenj.grpc.api.RPCDateRequest;
import com.chenj.grpc.api.RPCDateResponse;
import com.chenj.grpc.api.RPCDateServiceGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

public class GRPCClient {
    private static final String host = "localhost";
    private static final int serverPort = 9999;
    public static void main(String[] args) {
        //1,拿到一个通信channel
        ManagedChannel channel = ManagedChannelBuilder.forAddress(host, serverPort).
                usePlaintext()//无需加密或认证
                .build();
        try {
            //2.拿到stub对象
            RPCDateServiceGrpc.RPCDateServiceBlockingStub rpcDateService  = RPCDateServiceGrpc.newBlockingStub(channel);
            RPCDateRequest rpcDateRequest = RPCDateRequest.newBuilder()
                    .setUserName("JACK")
                    .build();
            //3,请求
            RPCDateResponse rpcDateResponse = rpcDateService.getDate(rpcDateRequest);
            //4,输出结果
            System.out.println(rpcDateResponse.getServerDate());
        } finally {
            // 5.关闭channel, 释放资源.
            channel.shutdown();
        }

    }
}

  然后先启动Server:  再启动Client:  可以看到执行成功。一个简单的gRPC helloworld工程就搭建好了。文章来源地址https://www.toymoban.com/news/detail-453150.html

到了这里,关于idea构建grpc项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • idea构建web项目-超详细教程

    idea构建web项目的超级详细教程,一步一步来,完全没问题! 1、新建一个空项目 2、新建java模块,名为webDemo1 3、选择webDemo1右键,选择Add Framework Support 选择Web Application 4、在WEB-INF下新建文件夹classes和lib 5、打开项目结构(Project Structure) 6、项目配置 7、模块配置 8、Facets配置,这

    2024年02月02日
    浏览(42)
  • JAVA项目通过IDEA如何构建可执行JAR

    开发JAVA工程代码(main方法启动)如何构建出可以通过java -jar命令直接执行的jar?如果工程中依赖其他jar又如何处理?本文即针对以上两点通过IDEA开发工具来做一个简单的分析和尝试,测试如下四种方法,如有瑕疵请轻喷。 如下所示通过IDEA创建一个本地JAVA工程,此处工程名J

    2024年02月04日
    浏览(64)
  • 8.idea 使用 docker 构建 java web 项目

    docker 构建 java web 项目 和 docker 构建 spring boot 项目,除了 Dockerfile 不同,其他是都一样的。其他步骤参考:idea 使用 docker 构建 spring boot 项目,构建 Java Web 项目的 Dockerfile示例如下: 因为 java web 项目打的是 war 包,docker 需要依赖的基础镜像是 tomcat 附一个 Dockerfile 示例: 本文

    2024年02月07日
    浏览(52)
  • 解决idea构建项目时,build超级慢且tomcat运行项目也超级慢!!

    前言:明明昨天项目还跑的好好的,今天来实验室以后就发现,idea在启动项目时巨慢,差不多它编译加上真正运行起来需要5分钟,这怎么可以。经过我苦苦的寻索,尝试了种种办法,终于用以下办法解决了。特此记录一下。 解决build时超级慢 1.选择Build-ReBuildProject  以此来重

    2024年02月09日
    浏览(43)
  • 【Idea+Maven+Git:构建高效Java项目的强大组合】

    在当今的软件开发世界中,集成开发环境(IDE)、构建工具和版本控制系统是每个项目不可或缺的组成部分。本文将深入探讨这三个工具:IntelliJ IDEA、Maven和Git,以及它们如何协同工作,帮助开发者构建更高效、更可靠的项目。上一篇介绍了Git的分支管理策略,本文将介绍相

    2024年02月20日
    浏览(100)
  • 杂记 | 使用idea构建SpringBoot项目并远程连接docker运行

    使用docker运行SpringBoot项目是一个不错的选择,传统方式需要手动打包并上传到服务器,再使用docker build构建镜像,再使用docker run启动运行,难免有些繁琐,本文介绍如何使用idea帮我们完成这些操作,简化操作流程。 (如上图)一般会默认带一个Docker,如果没有,点击+号创

    2024年02月12日
    浏览(41)
  • [项目实战] 使用Idea构建单页面Vue3项目(不使用node、npm)

    某天张三对小花说,我需要在一台新电脑上实现一个前端的漂亮页面:比如京东手机首页(m.jd.com)。 小花这时吭哧吭哧的去新电脑上安装nodejs、npm,然后在本地使用npm构建vue3项目,在项目里下载安装element-plus、axios。下一步进入编码阶段,写好的文件最后打包dist文件,放在

    2024年02月16日
    浏览(54)
  • IDEA用Gradle构建项目时,lombok插件无效的解决办法

    Lombok 可用来帮助开发人员消除 Java 的重复代码,尤其是对于简单的 Java 对象(POJO),比如说getter/setter/toString等方法的编写。它通过注解实现这一目的。 正确使用姿势 一、安装Lombok插件 菜单栏File - Settings - Plugins,在中间Marketplace下面输入Lombok搜索后进行安装,安装后会提

    2024年02月14日
    浏览(43)
  • 基于protobuf构建grpc服务

    protobuf是谷歌开源的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为profobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性。因此只能反序列化之后得到真正可读的数据。 优势: 序列化后体积相比Json和XML很小,适合网络传输 支持跨平台多

    2024年02月02日
    浏览(49)
  • 【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)

    文章内容框架: 一、开发工具  二、初始化配置 2.1、Maven初始化设置 2.2、JDK初始化设置 三、创建Maven项目 四、创建Spring Boot Web项目  五、实现一个Web项目         IntelliJ IDEA      版本号: ULtimate 2022.3         打开IntelliJ IDEA工具,进入欢迎页面。         本文在此处,

    2024年02月09日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包