gRPC学习之gRPC和SpringBoot整合

170 阅读1分钟

跟孙哥学java

孙哥主页

gRPC和SpringBoot整合的思想

实现服务端接口 ,自己写 创建服务端发布gRPC功能 Spring-boot帮我们封装 封装端口----yml ,发布服务--->@GrpcService

搭建开发环境

  1. 搭建Spring-boot-环境
  2. 引入依赖
    <dependency>
          <groupId>com.suns</groupId>
          <artifactId>rpc-grpc-api</artifactId>
          <version>1.0-SNAPSHOT</version>
     </dependency>

    <dependency>
        <groupId>net.devh</groupId>
        <artifactId>grpc-server-spring-boot-starter</artifactId>
        <version>2.14.0.RELEASE</version>
    </dependency>
  1. 开发服务
// 重复 多次 
@GrpcService
public class HelloServiceImpl extends HelloServiceGrpc.HelloServiceImplBase {
    @Override
    public void hello(HelloProto.HelloRequest request, StreamObserver<HelloProto.HelloResponse> responseObserver) {
        String name = request.getName();
        System.out.println("name is " + name);

        responseObserver.onNext(HelloProto.HelloResponse.newBuilder().setResult("this is result").build());
        responseObserver.onCompleted();
    }
}
// application.yml
# 核心配置的 就是gRPC服务的端口号
spring:
  application:
    name: boot-server

  main:
    web-application-type: none

grpc:
  server:
    port: 9000
  1. 客户端
 <dependency>
    <groupId>net.devh</groupId>
    <artifactId>grpc-client-spring-boot-starter</artifactId>
    <version>2.14.0.RELEASE</version>
 </dependency>

spring:
  application:
    name: boot-client

grpc:
  client:
    grpc-server:
      address: 'static://127.0.0.1:9000'
      negotiation-type: plaintext
@RestController
public class TestController {

   @GrpcClient("grpc-server")
   private HelloServerGrpc.HelloServerBlockingStub helloServerBlockingStub;

   @RequestMapping("/test1")
   public String test1(String name){
      System.out.println("name="+name);
      HelloProto.HelloResponse helloResponse = helloServerBlockingStub.hello(HelloProto.HelloRequest.newBuilder().setName(name).build());
      return helloResponse.getResult();
   }
}