现在系统都服务化,.net core 实现服务化的方式有很多,我们通过grpc实现客户端、服务端通信。

grpc(https://grpc.io/)是google发布的一个开源、高性能、通用RPC(Remote Procedure Call)框架,使用HTTP/2协议,支持多路复用,并用ProtoBuf作为序列化工具,提供跨语言、跨平台支持。下面以.net core演示如何使用grpc框架实现通信。

软件版本

.net core:2.0

grpc:1.11.0

项目结构

InstallGrpc .net framework类库 只为得到生成协议代码工具protoc.exe、grpc_csharp_plugin.exe,没有其他作用,如果已有工具,可以不用

Snai.GrpcClient 客户端 .net core 2.0控制台程序

Snai.GrpcService.Hosting 服务端宿主 .net core 2.0控制台程序

Snai.GrpcService.Impl 协议方法实现  .net standard 2.0类库

Snai.GrpcService.Protocol 生成协议方法 .net standard 2.0类库

运行结果

服务端

客户端

客户端调用服务端求和方法成功。

项目实现

一、服务端

新建Snai.GrpcService解决方案

1、编写协议

新建 Snai.GrpcService.Protocol协议类库项目,在 依赖项 右击 管理NuGet程序包 浏览 找到 Grpc.Core 版本1.11.0,Google.Protobuf 版本3.5.1 包下载安装

在项目根目录下新建一个 msg.proto 文件,打开 msg.proto 文件,在其中编写基于proto3语言的协议代码,用于自动生成到各语言协议,如果需要更深入的学习proto3语言可以打开该网站Proto3语言指南。msg.proto 代码如下

定义当前使用的是proto3语言并且包名(生成为C#则为命名空间):

syntax = "proto3";

package Snai.GrpcService.Protocol;

定义了1个服务,且有1个方法:

service MsgService{  rpc GetSum(GetMsgNumRequest) returns (GetMsgSumReply){}}

方法的接收参数和返回参数

message GetMsgNumRequest {  int32 Num1 = 1;  int32 Num2 = 2;}

message GetMsgSumReply {  int32 Sum = 1;}

2、将协议生成C#代码

生成协议代码需 protoc.exe、grpc_csharp_plugin.exe工具,在.net framework 项目下引用安装 Grpc.Tools 组件程序包,会得到protoc.exe、grpc_csharp_plugin.exe,但.net core 项目引用安装是不会下载工具到项目目录的,所以我们需要建一个.net framework项目,我建了个 InstallGrpc .net framework类库 用于引用安装得到工具。

这里得到工具有个小插曲,引用Grpc.Tools版本1.11.0得到protoc.exe、grpc_csharp_plugin.exe 拷到 Snai.GrpcService.Protocol 目录下生成不了,我再引用Google.Protobuf.Tools版本3.5.1里面有 protoc.exe,用 Grpc.Tools下的 grpc_csharp_plugin.exe, Google.Protobuf.Tools下protoc.exe 根据当前系统选择,拷贝到 Snai.GrpcService.Protocol 目录下。

先用Grpc.Tools 下的,如果生成不了,再用 Grpc.Tools下的 grpc_csharp_plugin.exe, Google.Protobuf.Tools下protoc.exe

然后在项目中新建一个名为ProtocGenerate.cmd的文件,在其中输入以下指令:

protoc -I . --csharp_out . --grpc_out . --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe msg.proto

然后直接双击运行,项目下生成了“Msg.cs”和“MsgGrpc.cs”两个文件,这样协议部分的所有工作就完成了,最终项目结构如下:

3、编写协议实现代码

新建Snai.GrpcService.Impl实现类库项目,在 依赖项 下载安装Grpc.Core 包,项目引用Snai.GrpcService.Protocol

在项目根目录下新建 MsgServiceImpl.cs 类文件,继承 MsgService.MsgServiceBase 协议类,实现服务方法,代码如下:

在项目根目录下新建 RpcConfig.cs 类文件,编写绑定服务到服务端,服务端 地址 端口 等信息,实现启动方法,代码如下:

最终项目结构如下:

4、编写服务端启动程序

新建Snai.GrpcService.Hosting 控制台程序,项目引用Snai.GrpcService.Impl

打开 Program.cs 文件,修改 Main 方法,加入服务启动,代码如下:

最终项目结构如下:

到此服务端所有代码已编写完成,下面开始编写客户端。

二、客户端

新建Snai.GrpcClient 控制台程序,在 依赖项 下载安装Grpc.Core 包,项目引用Snai.GrpcService.Protocol

在项目根目录下新建 MsgServiceClient.cs 类文件,编写与服务端通信的 地址 端口 等信息,并调用服务端方法,代码如下:

打开 Program.cs 文件,修改 Main 方法,得到服务端返回结果,显示结果,代码如下:

最终项目结构如下:

到此所有代码都已编写完成

三、启动

右击生成解决方案,生成完成后,先启动服务端,再启动客户端

命令行到服务端目录 Snai.GrpcService.Hosting\bin\Debug\netcoreapp2.0\,用命令 dotnet Snai.GrpcService.Hosting.dll 启动服务端

命令行到客户端目录 Snai.GrpcClient\bin\Debug\netcoreapp2.0\,用命令 dotnet Snai.GrpcClient.dll 启动客户端

客户端调用服务端方法成功,实现grpc

它们之间是通过Grpc.Core中的 Server 和 Channel 来通信

源码访问地址:https://github.com/Liu-Alan/Snai.GrpcService

相关文章:

  • 入门干货之Grpc的.Net 封装-MagicOnion

  • 基于 Consul 实现 MagicOnion(GRpc) 服务注册与发现

  • Abp + Grpc 如何实现用户会话状态传递

  • gRPC官方快速上手学习笔记(c#版)

原文地址: https://www.cnblogs.com/alan-lin/p/9000642.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

.net core grpc 实现通信(一)相关推荐

  1. .net core grpc consul 实现服务注册 服务发现 负载均衡(二)

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  2. 旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

    一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能第一时间发现问题. 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行:一方面,AWS对Li ...

  3. NetCore服务虚拟化01(集群组件Sodao.Core.Grpc)

    一. 起始 去年.NetCore2.0的发布,公司决定新项目采用.NetCore开发,当作试验.但是问题在于当前公司内部使用的RPC服务为Thrift v0.9 + zookeeper版本,经过个性化 ...

  4. dotnet core使用websocket通信

    dotnet core5.0 dotnet core支持websocket通信配置如下 app.UseWebSockets(new WebSocketOptions() {KeepAliveInter ...

  5. HMS Core连接与通信领域 打造通信畅快体验

    HMS Core连接与通信(System)技术论坛在华为开发者大会2020(Together)上开展,全天的分论坛共有近16个议题,10个重量级合作伙伴,200个开发者参与,围绕连接通信"产 ...

  6. ASP.NET Core gRPC 使用 Consul 服务注册发现

    一. 前言 gRPC 在当前最常见的应用就是在微服务场景中,所以不可避免的会有服务注册与发现问题,我们使用gRPC实现的服务可以使用 Consul 或者 etcd 作为服务注册与发现中心,本文主要介绍 ...

  7. Dapr 运用之集成 Asp.Net Core Grpc 调用篇

    前置条件: <Dapr 运用> 改造 ProductService 以提供 gRPC 服务 从 NuGet 或程序包管理控制台安装 gRPC 服务必须的包 Grpc.AspNetCore ...

  8. Java 实现Grpc服务通信

    GRPC实现服务通信 grpc相关特性: gRPC 是一种现代开源高性能远程过程调用 (RPC) 框架,可以在任何环境中运行.它可以通过对负载平衡.跟踪.健康检查和身份验证的可插拔支持,有效地连接数据 ...

  9. 基于GRPC+consul通信的服务化框架

    -.背景 谈论服务化框架的时候,我们首先先了解这些概念:SOA.ESB.OSGi.servicemix.微服务.Spring Boot SOA:面向服务架构,传统简单的网站系统采用MVC架构,随着系统 ...

最新文章

  1. MySQL数据库-完全备份及恢复
  2. 未来,机器人帮你盖房子
  3. hive sqoop 分区导入_使用sqoop将hive分区表的数据导入到mysql的解决方案:shell脚本循环...
  4. 联想android4.4.2版本,联想YOGA 平板2系统是什么?能升级安卓4.2吗?
  5. 面向对象思想精华总结
  6. 面试官让你用C语言实现大数相乘,慌吗?
  7. EventBus 使用介绍
  8. TypeScript完全解读(26课时)_2.TypeScript完全解读-基础类型
  9. 通俗理解动态库与静态库区别
  10. Diablo3狗熊榜
  11. 计算机网络安全及故障谢辞,计算机网络安全初探.pdf
  12. 解决win2019安装.net3.5的问题,亲测可行(未成功启用报错,找不到源文件报错,统统解决。。)
  13. 操作系统与计算机网络
  14. 怎么在python官网下载python,python的官方网址是什么
  15. mysql中information_schema数据库
  16. 大学物理学(第5版)下(第14章)课后习题答案
  17. C#删除文件和文件夹到回收站
  18. POJ 3621 Sightseeing Cows(最优比率环+spfa的dfs判环优化)
  19. idea完美激活 转载
  20. AWD平台搭建与使用入门

热门文章

  1. Java并发编程 - Executor,Executors,ExecutorService, CompletionServie,Future,Callable
  2. Scala具体解释---------Scala是什么?可伸展的语言!
  3. 对抗告警疲劳的8种方法
  4. TTL expired in transit--问题篇~
  5. JS实现上下左右四方向无间隙滚动
  6. BCVP开发者社区2022专属周边第一弹
  7. WPF 实现大转盘抽奖~
  8. 龙芯3A5000完成流片 同主频性能追平AMD Zen1
  9. BeetleX之Web网关1.5.7安装使用
  10. 深入研究.NET 5的开放式遥测