IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Grpc demo java 实现 -> 正文阅读

[开发工具]Grpc demo java 实现

环境

JDK8 + Maven3.6.3
我的 Grpc-java demo https://github.com/999bug/grpc-java 记得star😊😊

搭建步骤

1、利用代码编译器创建maven 项目

2、添加依赖坐标

 <dependencies>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-netty-shaded</artifactId>
            <version>1.44.0</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-protobuf</artifactId>
            <version>1.44.0</version>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-stub</artifactId>
            <version>1.44.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>
    </dependencies>

3、添加构建grpc proto插件

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

注意
<protoSourceRoot>src/main/proto</protoSourceRoot>
protoSourceRoot 设置proto文件的位置,不然插件不能正常编译
在这里插入图片描述

4、在protoSourceRoot 设置的文件夹下面创建helloWord.proto 文件,后缀必须为.proto,文件名无所谓

syntax = "proto3";

option java_multiple_files = true;
//指定该proto文件编译成的java源文件的包名
option java_package = "com.ncst.grpc.protobuf";
// 表示下面的message编译成的java类文件的名字
option java_outer_classname = "GrpcHelloProto";

package Hello;
// 使用的时候此类是所有使用类的前缀,定义rpc方法
如HelloGrpc、HelloBlockingStub、HelloResponse、HelloRequest
service Hello {
  rpc SayHello (HelloRequest) returns (HelloResponse) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloResponse {
  string message = 1;
}

5、利用 Maven 插件,构建grpc 源代码

  • 首先运行compile
  • 然后接着运行compile-custom
    在这里插入图片描述

6、构建完成会发现在 target 包中生成如下代码

在这里插入图片描述

7、将protobuf 包移入项目中

在这里插入图片描述

编写server 端代码

1、远程调用方法实现类 HelloServiceImpl

package client.service;

import client.grpc.HelloGrpc;
import client.grpc.protobuf.HelloRequest;
import client.grpc.protobuf.HelloResponse;
import io.grpc.stub.StreamObserver;

/**
 * @author Lsy
 * @date 2022/2/18
 */
public class HelloServiceImpl extends HelloGrpc.HelloImplBase {

    @Override
    public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) {
        HelloResponse helloResponse = HelloResponse.newBuilder()
                .setMessage("我是业主晓丹,我不喜欢保安,我希望每天都说 宝 早安,而不是早 保安!")
                .build();
        responseObserver.onNext(helloResponse);
        responseObserver.onCompleted();
        System.out.println("message from Grpc-client:" + request.getName());
    }
}

2、ServerService

package client.service;

import io.grpc.ServerBuilder;
import java.io.IOException;

/**
 * @author Lsy
 * @date 2022/2/21
 */
public class ServerService {
    private static final int port = 10086;
    private static io.grpc.Server server;

    public static void start() throws IOException, InterruptedException {
        server = ServerBuilder.forPort(port)
                .addService(new HelloServiceImpl())
                // 设置服务器上允许接收的最大邮件大小。如果未调用,则默认为4 MiB,所以要设置此参数
                .maxInboundMessageSize(Integer.MAX_VALUE)
                .build()

                .start();
        System.out.println("server start port: " + port);
        server.awaitTermination();
    }

}

3、Server 端启动类

package client.stater;

import client.service.ServerService;

import java.io.IOException;

/**
 * @author Lsy
 * @date 2022/2/18
 */
public class Server {
    public static void main(String[] args) throws IOException, InterruptedException {
        ServerService.start();
    }
}

Client 端

1、BaseService

package client.service;

import client.grpc.HelloGrpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

import java.util.concurrent.TimeUnit;

/**
 * @author Lsy
 * @date 2022/2/18
 */
public abstract class BaseService {

    protected final ManagedChannel channel;
    protected final HelloGrpc.HelloBlockingStub blockingStub;

    public BaseService(String host, int port) {
        channel = ManagedChannelBuilder
                .forAddress(host, port)
                .usePlaintext()
                // 传输的数据大于4MB时,需要指定此参数
                .maxInboundMessageSize(Integer.MAX_VALUE)
                .build();
        blockingStub = HelloGrpc.newBlockingStub(channel);
    }

    public void shutdown() {
        try {
            channel.awaitTermination(5, TimeUnit.SECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public abstract void sayHello(String str);
}

2、BaseServiceImpl

package client.service;

import client.grpc.protobuf.HelloRequest;
import client.grpc.protobuf.HelloResponse;

/**
 * @author Lsy
 * @date 2022/2/18
 */
public class BaseServiceImpl extends BaseService {

    public BaseServiceImpl(String host, int port) {
        super(host, port);
    }

    @Override
    public void sayHello(String str) {
        HelloRequest request = HelloRequest.newBuilder()
                .setName(str)
                .build();
        HelloResponse response;
        response = blockingStub.sayHello(request);
        System.out.println("message from Grpc-server: " + response.getMessage());
        System.out.println();
    }

}

3、Client 启动类

package client.stater;

import client.service.BaseService;
import client.service.BaseServiceImpl;

/**
 * @author Lsy
 * @date 2022/2/18
 */
public class Client {
    public static void main(String[] args) {
        BaseService client = new BaseServiceImpl("127.0.0.1", 10086);
        client.sayHello("我是一名保安,保卫一方平安,爱吃小熊饼干,喜欢业主晓丹");
        client.shutdown();
    }
}

调用结果

Server 端

在这里插入图片描述

Client 端

在这里插入图片描述

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:50:46  更:2022-02-26 11:54:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:32:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码