热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gRpc跨语言调用(NetCore与SpringBoot)

NetCore3.1:前天才发布的正式版netcore3.1 https:devblogs.microsoft.comdotnetannouncing-net-core-3-1  

NetCore 3.1:

前天才发布的正式版netcore 3.1 https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/   手痒中...

简介如下:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.1

示例代码如下:https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/tutorials/grpc/grpc-start/sample 也可以自己写。

以上没什么难度。

spring boot :

 很遗憾到现在为止,还没有grpc的官方版本,我这采用 https://yidongnan.github.io/grpc-spring-boot-starter/zh-CN/

https://github.com/yidongnan/grpc-spring-boot-starter 源码下载下来,当然也可以自己写 https://github.com/yidongnan/grpc-spring-boot-starter/tree/master/examples 中的示例。

gRpc 跨语言调用(NetCore 与 Spring Boot)

 

 

 先编译 grpc-lib 之后分别编译 client 和 server 正常运行。

以上没什么难度。

相互调用:

net 中示例使用的是 http2且带着 tls 

spring 中示例使用的是 http2 无 tls 

gRpc 跨语言调用(NetCore 与 Spring Boot)

 

 

 gRpc 跨语言调用(NetCore 与 Spring Boot)

所以只需要修改net的即可!!!

注意 proto 保持一致(proto3),

文件中 option 以上部分不用动,只需要统一 service 定义部分即可。

 

 1 package greet;
 2 
 3 // The greeting service definition.
 4 service Greeter {
 5   // Sends a greeting
 6   rpc SayHello (HelloRequest) returns (HelloReply);
 7 }
 8 
 9 // The request message containing the user's name.
10 message HelloRequest {
11   string name = 1;
12 }
13 
14 // The response message containing the greetings.
15 message HelloReply {
16   string message = 1;
17 }
 1  public class Program
 2     {
 3         public static void Main(string[] args)
 4         {
 5             CreateHostBuilder(args).Build().Run();
 6         }
 7 
 8         public static IHostBuilder CreateHostBuilder(string[] args) =>
 9             Host.CreateDefaultBuilder(args)
10                 .ConfigureWebHostDefaults(webBuilder =>
11                 {
12                     webBuilder.ConfigureKestrel(optiOns=>
13                     {
14                         // Setup a HTTP/2 endpoint without TLS.
15                         options.ListenLocalhost(5000, o => o.Protocols =
16                             HttpProtocols.Http2);
17                     });
18                     webBuilder.UseStartup();
19                 });
20     }

来自 https://docs.microsoft.com/zh-cn/aspnet/core/grpc/troubleshoot?view=aspnetcore-3.1#unable-to-start-aspnet-core-grpc-app-on-macos

Kestrel 必须在Program.cs中配置不包含 TLS 的 HTTP/2 终结点

客户端修改如下:

 1     class Program
 2     {
 3         #region snippet
 4         static async Task Main(string[] args)
 5         {
 6             // The port number(5001) must match the port of the gRPC server.
 7             AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
 8 
 9             var channel = GrpcChannel.ForAddress("http://localhost:5001");
10             var client =  new Greeter.GreeterClient(channel);
11             var reply = await client.SayHelloAsync(
12                               new HelloRequest { Name = "GreeterClient" });
13             Console.WriteLine("Greeting: " + reply.Message);
14             Console.WriteLine("Press any key to exit...");
15             Console.ReadKey();
16         }
17         #endregion
18     }

来自 https://docs.microsoft.com/zh-cn/aspnet/core/grpc/troubleshoot?view=aspnetcore-3.1#call-insecure-grpc-services-with-net-core-client

GRPC 客户端必须将 System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport 开关设置为 true 并使用服务器地址中的 http

改一下各自的服务端和客户端的端口地址就可以互通有无了,效果如下:

        public override Task SayHello(
            HelloRequest request, ServerCallContext context)
        {
            return Task.FromResult(new HelloReply
            {
                Message = "Hello " + request.Name +" From Net Core."
            });
        }
View Code
推荐阅读
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
author-avatar
笨蚂蚁88
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有