当前位置:   article > 正文

springboot 整个grpc_grpc.client.__name__.negotiationtype=plaintext

grpc.client.__name__.negotiationtype=plaintext

什么是gRPC

gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行。它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查和身份验证。它还适用于分布式计算的最后一英里,用于将设备,移动应用程序和浏览器连接到后端服务。

简单的服务定义:使用Protocol Buffers定义您的服务,这是一个功能强大的二进制序列化工具集和语言

一、搞定protobuf

 1)maven,在plugins目录下加入下面的plugin

  1. <plugin>
  2. <groupId>org.xolstice.maven.plugins</groupId>
  3. <artifactId>protobuf-maven-plugin</artifactId>
  4. <version>0.5.0</version>
  5. <configuration>
  6. <protocArtifact>com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier}</protocArtifact>
  7. <pluginId>grpc-java</pluginId>
  8. <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.6.1:exe:${os.detected.classifier}</pluginArtifact>
  9. </configuration>
  10. <executions>
  11. <execution>
  12. <goals>
  13. <goal>compile</goal>
  14. <goal>compile-custom</goal>
  15. </goals>
  16. </execution>
  17. </executions>
  18. </plugin>

2)注意:os.detected.classifier,如何得到:

如何得到os.detected.classifier

3)编译之后,在右边maven的目录下,会出现protobuf的插件

4)写.proto文件,定义服务。注意.proto的位置,和java在同一目录

modelTraining.proto的内容:

  1. syntax = "proto3";
  2. //定义输出的目录,生成的目录就是“net/devh/examples/grpc/lib”下面
  3. option java_package = "com.product.selftraining.proto";
  4. //定义输出的文件名称,生成在lib下的就是HelloWorldProto.class
  5. option java_outer_classname = "ModelTrainingProto";
  6. // The greeting service definition.
  7. //定义的接口的类,这里会生成一个SimpleGrpc.class,服务端需要来实现的
  8. service ModelTrainingService {
  9. //定义接口方法
  10. //定义训练接口,调用python的服务
  11. rpc modelTrainning (ModelTrainingRequest) returns (TrainingResponse) {
  12. }
  13. }
  14. //请求参数
  15. message ModelTrainingRequest {
  16. string name = 1;
  17. }
  18. //返回结果
  19. message TrainingResponse {
  20. string message = 1;
  21. }

点击protobuf的compile和compile-custome

会在target文件夹下生成相应的文件

至此,protobuf搞定

二、grpc-client搭建

新增加依赖:grpc-client起步依赖

  1. <dependency>
  2. <groupId>net.devh</groupId>
  3. <artifactId>grpc-client-spring-boot-starter</artifactId>
  4. <version>2.6.1.RELEASE</version>
  5. </dependency>

修改属性文件,增加如下内容:

  1. #grpc设置
  2. grpc.client.hello-grpc-server.address=static://localhost:6000
  3. grpc.client.hello-grpc-server.enableKeepAlive=true
  4. grpc.client.hello-grpc-server.keepAliveWithoutCalls=true
  5. grpc.client.hello-grpc-server.negotiationType=plaintext

新建调用grpc-server服务的类:

  1. package com.product.selftraining.proto.Impl;
  2. import com.product.selftraining.commons.responses.BaseResponse;
  3. import com.product.selftraining.commons.responses.GrpcModelTrainingResponse;
  4. import com.product.selftraining.proto.ModelTrainingGrpcService;
  5. import com.product.selftraining.proto.ModelTrainingProto;
  6. import com.product.selftraining.proto.ModelTrainingServiceGrpc;
  7. import io.grpc.Channel;
  8. import net.devh.boot.grpc.client.inject.GrpcClient;
  9. import org.springframework.stereotype.Service;
  10. /**
  11. * @author wangwenxuan
  12. * @date 2020/2/29
  13. * @description grpc调用python端服务的实现类
  14. */
  15. @Service
  16. public class ModelTrainingGrpcServiceImpl implements ModelTrainingGrpcService {
  17. @GrpcClient("hello-grpc-server")
  18. private Channel serverChannel;
  19. public BaseResponse<GrpcModelTrainingResponse> trainningModel(GrpcModelTrainingResponse grpcModelTrainingResponse){
  20. ModelTrainingServiceGrpc.ModelTrainingServiceBlockingStub stub = ModelTrainingServiceGrpc.newBlockingStub(serverChannel);
  21. //TODO:!!!request和response的搭建
  22. ModelTrainingProto.ModelTrainingRequest.Builder builder= ModelTrainingProto.ModelTrainingRequest.newBuilder();
  23. ModelTrainingProto.TrainingResponse response = stub.modelTrainning(builder.build());
  24. return BaseResponse.success();
  25. }
  26. }

三、grpc-server搭建

目前我不用,因为server搭在别的语言端

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/145879
推荐阅读
相关标签
  

闽ICP备14008679号