tnblog
首页
登录

Grpc远程过程调用

326人阅读 2021/3/22 23:27 总访问:15381 评论:0 手机 收藏
分类: GRpc

  前  言

tnblog

 Grpc 跨平台 跨语言的Rpc(远程过程调用)框架   Rpc框架有许多种 Grpc 使用传输数据格式为 Protbuf二进制的数据格式进行传输.

特点:让开发者可以像调用本地方法一样调用远程服务器的方法


 1.创建GrpcService项目

    1.1创建.proto后缀文件 

syntax = "proto3";

option csharp_namespace = "RmTonyCustomGrpcServer";

package greet;

//1、定义接口名字
service TonyService{
    
 rpc TonySay (TonyRequest) returns (TonyResponse);
}

// 2、定义入参(类)
message TonyRequest{
    string name = 1;
}

// 3、定义出参(类)
message TonyResponse{
    string message = 1;
}

注:这里的1是一个标识 非值 


对应接口实现

/// <summary>
    /// 1、实现类
    /// </summary>
    public class TonyServiceImpl : TonyService.TonyServiceBase
    {
        public override Task<TonyResponse> TonySay(TonyRequest request, ServerCallContext context)
        {
            Console.WriteLine($"grpc:{request.Name}");
            return Task.FromResult(new TonyResponse
            {
                Message = "Hello " + request.Name
            });
        }
    }


Startup.cs

         public void ConfigureServices(IServiceCollection services)
        {
            // 1、开启grpc
            services.AddGrpc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                // 1、映射grpc服务
                endpoints.MapGrpcService<TonyServiceImpl>();
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }


CreateHostBuilder配置

  public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    // 1、配置http2协议
                    webBuilder.UseKestrel(options => {
                        options.ConfigureEndpointDefaults(options => {
                            options.Protocols = HttpProtocols.Http2;
                        });
                    });

                    webBuilder.UseStartup<Startup>();
                });





创建client端


拷贝生成的 .proto后缀文件到 Protos文件夹
Program.cs

static void Main(string[] args)
        {



            // 1、建立连接
            GrpcChannel grpcChannel = GrpcChannel.ForAddress("https://localhost:5001");

            // 2、客户端创建
            TonyServiceClient tonyServiceClient = new TonyService.TonyServiceClient(grpcChannel);

            // 3、开始调用
            TonyResponse tonyResponse = tonyServiceClient.TonySay(new TonyRequest()
            {
                Name = "客户端"
            });

            // 4、打印
            Console.WriteLine($"返回值打印:{tonyResponse.Message}");

            grpcChannel.Dispose();

        }


启动 GrpcService


运行GrpcClient


调用Grpc 成功 Grpc夸语言 大家有兴趣可以去尝试

评价
我要变强不变秃
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2020TNBLOG.NET
技术交流:群号677373950
欢迎加群交流技术