栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

.NET6 中gRPC使用实践

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.NET6 中gRPC使用实践

1.创建gRPC服务

新建一个gRPC模板的项目

2.创建proto

右键-属性-查看生成方式

3.编写服务
syntax = "proto3";

option csharp_namespace = "GrpcServiceTT.Protos";

package order;

// 订单服务定义
service Order {
    // 创建订单
    rpc CreateOrder (CreateRequest) returns (CreateResult);
    //查询订单
    rpc QueryOrder (QueryRequest) returns (QueryResult);
}

//创建订单请求参数
message CreateRequest {
    string orderNo = 1;
    string orderName=2;
    double price=3;
}

//创建订单返回结果
message CreateResult {
    bool result = 1;
    string message=2;
}

//查询订单请求参数
message QueryRequest{
    string orderNo=1;
}
//查询订单返回结果
message QueryResult{
    int32 id=1;
    string orderNo=2;
    string orderName=3;
    double price=4;
}

编译之后就生成了对应的类

3.1 编写OrderService

在Services 新建OrderService.class

继承的Order.OrderBase 是上面的proto文件生成的,然后实现了proto里面定义的两个服务。

using Grpc.Core;
using GrpcServiceTT;
using GrpcServiceTT.Protos;

namespace GrpcServiceTT.Services
{
    public class OrderService : Order.OrderBase
    {
        public override Task CreateOrder(CreateRequest request, ServerCallContext context)
        {
            return Task.FromResult(new CreateResult
            {
                Result = true,
                Message = "订单创建成功"
            });
        }

        public override Task QueryOrder(QueryRequest request, ServerCallContext context)
        {
            return Task.FromResult(new QueryResult()
            {
                Id = 1,
                OrderNo = DateTime.Now.ToString("yyyyMMddHHmmss"),
                OrderName = "冰箱",
                Price = 1288 
            }); 
        }
         


    }
}

然后在program.cs里面把服务注入管道。

4.创建客户端服务
  1. 创建WebAPI
  2. 安装nuget包 Grpc.AspNetCore
  3. 把服务端的proto文件拷贝过来,设置好参数后,会生成下图类

5.gRPC服务Https的调用
//常规使用,https
            string url = "https://localhost:5001";

            // http
            //string url = "http://localhost:5000";
            //AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
           
            using (var channel = GrpcChannel.ForAddress(url))
            {
                var client = new Order.OrderClient(channel);
                var reply = client.CreateOrder(new CreateRequest()
                {
                    OrderNo = DateTime.Now.ToString("yyyMMddHHmmss"),
                    OrderName = "冰箱22款",
                    Price = 1688,
                }); 
            }

6.IOC注入的方式调用

program.cs里面注入gRPCClient

#region gRPC Client注册
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
builder.Services.AddGrpcClient(options =>
{
    options.Address = new Uri("http://localhost:5000");
}).ConfigureChannel(grpcOptions =>
{
    //可以完成各种配置,比如token
});
#endregion 
//注意:要放在 var app = builder.Build(); 之前不然会报错 
调用方式
 private OrderClient _orderClient;
        public ValuesController(OrderClient orderClient)
        {
            _orderClient = orderClient;
        }
 
        [HttpGet]
        public IEnumerable Get()
        { 
            var reply = _orderClient.CreateOrder(new CreateRequest()
            {
                OrderNo = DateTime.Now.ToString("yyyMMddHHmmss"),
                OrderName = "冰箱22111款",
                Price = 1688,
                Remark = "TRRRRRRRRRRRRRRRR"
            });

            return new string[] { reply.Message, reply.Result.ToString() };
     
        }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号