ssh命令 Yarn 哨兵模式 menu jquery获取元素宽度 android小程序源代码 linux查看mysql进程 idea整理代码 mysql转字符串 jq入口函数 数据库查询 python编程教程 python基础练习 python入门例子 python中re模块 java变量 java基础类型 java课程 java的方法 java中的注释 java获取当前线程 java怎么安装 java格式化字符串 java截取 linux如何安装 0x0000004e js转int 七宗罪游戏下载 mathcad15 远程桌面管理软件 语音分析软件 电脑待机费电吗 bin文件编辑器 抽出滤镜下载 su镜像 ps取色 软件编程软件 pr怎么加字幕特效 pr怎么旋转视频画面 android浏览器
当前位置: 首页 > 学习教程  > 编程语言

gRpc JAVA应用实例

2021/1/13 19:36:56 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

gRpc JAVA应用实例 &#xff08;1&#xff09;添加maven依赖 在pom.xml中添加&#xff1a; <dependencies><dependency><groupId>com.google.protobuf</groupId><artifactId>protobuf-java</artifactId><version>3.5.1</versi…

gRpc JAVA应用实例

(1)添加maven依赖

pom.xml中添加:

<dependencies>
    <dependency>
        <groupId>com.google.protobuf</groupId>
        <artifactId>protobuf-java</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-all</artifactId>
        <version>1.17.1</version>
    </dependency>
</dependencies>

<build>
    <extensions>
        <extension>
            <groupId>kr.motd.maven</groupId>
            <artifactId>os-maven-plugin</artifactId>
            <version>1.4.1.Final</version>
        </extension>
    </extensions>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!--在这里修改版本-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
        </plugin>
        <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.0</version>
            <configuration>
                <protocArtifact>com.google.protobuf:protoc:3.4.0:exe:${os.detected.classifier}</protocArtifact>
                <pluginId>grpc-java</pluginId>
                <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.7.0:exe:${os.detected.classifier}</pluginArtifact>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>compile-custom</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

(2)定制服务

  1. 新建文件src/main/proto/test.proto
syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.example.demo.proto";
option java_outer_classname = "HelloProto";

package com.acupt.grpc;

service HelloService {
  rpc hello (InvokeRequest) returns (InvokeResponse) {}

}

message InvokeRequest {
  string name = 1;
}

message InvokeResponse {
  string msg = 1;
}
  1. 构建,编译proto文件

    执行后可在项目目录/target/generated-sources/protobuf目录下找到生成的Java文件,用这些代码可以实现gRPC远程调用。

    但在项目中还无法直接引用上面的类,右键target -> Mark Directory as -> Generated Sources Root,,然后就可以在项目中引用了。

(3)使用

  1. 编写服务实现类
package com.example.demo.grpc;

import com.example.demo.proto.HelloServiceGrpc;
import com.example.demo.proto.InvokeRequest;
import com.example.demo.proto.InvokeResponse;
import io.grpc.stub.StreamObserver;

/**
 1. 服务实现类
 */
public class HelloService extends HelloServiceGrpc.HelloServiceImplBase {

    @Override
    public void hello(InvokeRequest request, StreamObserver<InvokeResponse> responseObserver) {
        System.out.println("request -> " + request);
        String name = request.getName();//自定义的字段名 name
        InvokeResponse response = InvokeResponse.newBuilder()
                .setMsg("hello," + name)//自定义的字段名 msg
                .build();
        responseObserver.onNext(response);
        responseObserver.onCompleted();
    }
}
  1. 编写服务器端
package com.example.demo.grpc;

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

import java.io.IOException;

/**
 1. 服务提供方
*/
public class MyServer {
    public static void main(String[] args) throws IOException, InterruptedException {
        int port = 50051;
        Server server = ServerBuilder.forPort(port)
                .addService(new HelloService())
                .build()
                .start();
        System.out.println("started");

        server.awaitTermination();
//        Thread.sleep(1000 * 60 * 2);
//        server.shutdown();
//        System.out.println("shutdown");
    }
}
  1. 客户端
package com.example.demo.grpc;

import com.example.demo.proto.HelloServiceGrpc;
import com.example.demo.proto.InvokeRequest;
import com.example.demo.proto.InvokeResponse;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

/**
 * 服务调用方
 */
public class MyClient {

    public static void main(String[] args) throws InterruptedException, ExecutionException, TimeoutException {
        InvokeRequest request = InvokeRequest.newBuilder().setName("tom").build();
        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50051).usePlaintext(true).build();
        HelloServiceGrpc.HelloServiceBlockingStub blockingStub = HelloServiceGrpc.newBlockingStub(channel);
        InvokeResponse response = blockingStub.hello(request);
        System.out.println(response.getMsg());

        //客户端程序结束后,服务端报java.io.IOException: 远程主机强迫关闭了一个现有的连接。
        //grpc managedChannel.shutdown
        channel.shutdown().awaitTermination(1, TimeUnit.SECONDS);
//        channel.shutdown();

//        HelloServiceGrpc.HelloServiceFutureStub futureStub = HelloServiceGrpc.newFutureStub(channel);
//        ListenableFuture<InvokeResponse> future = futureStub.hello(request);
//        future.addListener(
//                () -> System.out.println("listener 1"),
//                command -> {
//                    System.out.println("execute 1 " + command);
//                    command.run();
//                });
//        future.addListener(
//                () -> System.out.println("listener 2"),
//                command -> {
//                    System.out.println("execute 2 " + command);
//                    command.run();
//                });
//
//        System.out.println(future.get(10, TimeUnit.SECONDS));

    }
}

本文链接: http://www.dtmao.cc/news_show_600130.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?