首页 > 编程语言 >.Net Grpc Client调用Java Grpc Server

.Net Grpc Client调用Java Grpc Server

时间:2023-05-17 14:34:11浏览次数:54  
标签:java protobuf Grpc Server grpc dapr client Java

1. Java Grpc Server

参考地址:

1.新建SpringBoot项目[略]

2.POM引入相关依赖

    <dependencies>
         <dependency>
            <groupId>io.github.lognet</groupId>
            <artifactId>grpc-spring-boot-starter</artifactId>
            <version>5.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.protobuf</groupId>
            <artifactId>protobuf-java</artifactId>
            <version>3.23.0</version>
        </dependency>
    </dependencies>
    <build>
        <extensions>
            <!-- 检测当前系统信息的工具-->
            <extension>
                <groupId>kr.motd.maven</groupId>
                <artifactId>os-maven-plugin</artifactId>
                <version>1.7.1</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.23.0:exe:${os.detected.classifier}</protocArtifact>
                    <pluginId>grpc-java</pluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.55.1:exe:${os.detected.classifier}</pluginArtifact>
                    <!--默认值,proto源文件路径-->
                    <protoSourceRoot>${project.basedir}/src/main/java/cn/coreqi/dapr_server/proto</protoSourceRoot>
                    <!--默认值,proto目标java文件路径-->
                    <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                    <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true,设置为false时也会覆盖同名文件-->
                    <clearOutputDirectory>false</clearOutputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <!--在执行mvn compile的时候会执行以下操作-->
                        <phase>compile</phase>
                        <goals>
                            <!--生成OuterClass类-->
                            <goal>compile</goal>
                            <!--生成Grpc类-->
                            <goal>compile-custom</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3.编写proto文件

syntax = "proto3";


option java_multiple_files = true;
option java_package = "cn.coreqi.dapr_server.protobuf";
option java_outer_classname = "HelloWorldProto";


service HelloWorld {
  rpc Say (SayRequest) returns (SayResponse) {}
}

message SayRequest {
  string message = 1;
}

message SayResponse {
  string message = 1;
  string timestamp = 2;
}

4.使用插件生成相关文件

image

5.编写服务的实现

package cn.coreqi.dapr_server.services;

import cn.coreqi.dapr_server.protobuf.HelloWorldGrpc;
import cn.coreqi.dapr_server.protobuf.SayRequest;
import cn.coreqi.dapr_server.protobuf.SayResponse;
import io.grpc.stub.StreamObserver;
import org.lognet.springboot.grpc.GRpcService;

@GRpcService
public class HelloWorldServiceImpl extends HelloWorldGrpc.HelloWorldImplBase {
    @Override
    public void say(SayRequest request, StreamObserver<SayResponse> responseObserver) {
        SayResponse response = SayResponse.newBuilder()
                .setMessage("你好," + request.getMessage())
                .setTimestamp(Long.valueOf(System.currentTimeMillis()).toString())
                .build();
        responseObserver.onNext(response);
        responseObserver.onCompleted();
    }
}

6.修改相关配置

grpc.port=8081

2..NET Grpc Client

1.新建控制台项目[略]

2.引入相关依赖

dotnet add dapr_client.csproj package Google.Protobuf
dotnet add dapr_client.csproj package Grpc.Core
dotnet add dapr_client.csproj package Grpc.Tools

3.复制proto文件,生成方式选择服务端和客户端[略]

image

4.编写客户端文件

using Grpc.Core;

namespace dapr_client.client;

public class HelloServiceClient
{
        private static Channel _channel;
        private static HelloWorld.HelloWorldClient _client;

        static HelloServiceClient()
        {
            _channel = new Channel("127.0.0.1:8081", ChannelCredentials.Insecure);
            _client = new HelloWorld.HelloWorldClient(_channel);
        }

        public static SayResponse Say(SayRequest sayRequest)
        {
            return _client.Say(sayRequest);
        }
}

5.在启动类中调用

SayResponse? result = HelloServiceClient.Say(new SayRequest()
{
    Message = "coreqi"
});

标签:java,protobuf,Grpc,Server,grpc,dapr,client,Java
From: https://www.cnblogs.com/fanqisoft/p/17408643.html

相关文章

  • Java中十个常见的违规编码
    摘要:作者VeeraSundar在清理代码工作时发现一些常见的违规编码,因此,VeeraSundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错......
  • 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
    JavaNIO成功的应用在了各种分布式、即时通信和中间件Java系统中。证明了基于NIO构建的通信基础,是一种高效,且扩展性很强的通信架构。基于Reactor模式的高可扩展性架构这个架构的基本思路在“基于高可用性NIO服务器架构”(http://today.java.net/pub/a/today/2007/02/13/architectur......
  • 浅谈Javascript 中几种克隆(clone)方式
    一:在Javascript里,如果克隆对象是基本类型,我们直接赋值就可以了:Js代码varsStr="kingwell";varcStr=sStr;alert(cStr);//输出kingwellsStr="abc";alert(cStr);//输出kingwell; 把一个值赋给另一个变量时,当那个变量的值改变的时候,另一个值不会受到影响。 ......
  • springboot中使用application.properties配置mysql和sqlserver
    1.使用依赖*mysql:<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>*sqlserver:<dependency><groupId>com.microsoft.sqlserver</groupId><art......
  • SqlServer查询存储过程和视图是否用到表字段
     查询存储过程视图是否用到表和字段selectnamefromsysobjectsassinnerjoinsyscommentsasoons.id=o.idwheretextlikeN'%表名%字段名%'--查询表字段SELECTOBJECT_NAME(object_id)'表名',nameAS'列名称'FROMsys.columns......
  • Java 发展历史
     1995年5月23日,Java语言诞生1996年1月,第一个JDK-JDK1.0诞生1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术1996年9月,约8.3万个网页应用了JAVA技术来制作1997年2月18日,JDK1.1发布1997年4月2日,JavaOne会议召开,参与......
  • Java 主要特性
     Java语言是简单的:Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动分配......
  • JavaScript——数字超过精度导致数据有误
    前言接口返回的number类型的数据,超过了JavaScript中Number类型的限制,浏览器自动进行了转换;console.log(7232167009634730040)内容以下内容来自ClaudeJavaScript的Number类型可以安全表示的最大整数是2^53-1,也就是9007199254740991。大于这个值的整数在JavaScript......
  • Java Jackson框架使用小技巧
    Jackson框架:  Jackson是一个简单的、功能强大的、基于Java的应用库。它可以很方便完成Java对象和Json对象(xml文档or其它格式)进行互转。Jackson社区相对比较活跃,更新速度也比较快。  Jackson库有如下几大特性:  -高性能且稳定:低内存占用,对大/小JSON串,大/小对象的解析表现均......
  • JAVA实现html代码转为图片
    方法一:html2Image1、引入依赖<dependency><groupId>gui.ava</groupId><artifactId>html2image</artifactId><version>2.0.1</version></dependency>2、代码实现@ComponentpublicclassHtmlUtil{/***......