欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET8中g(shù)RPC的使用方法詳解

 更新時(shí)間:2025年03月19日 10:18:08   作者:代碼拾光  
gRPC是一種高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,基于 HTTP/2 協(xié)議,支持雙向流、頭部壓縮等特性,下面我們就來看看.NET8下gRPC的具體使用吧

在現(xiàn)代分布式系統(tǒng)中,服務(wù)之間的通信是一個(gè)非常重要的環(huán)節(jié)。隨著微服務(wù)架構(gòu)的流行,服務(wù)之間的通信方式也在不斷演進(jìn)。gRPC作為一種高性能、跨語言的RPC框架,逐漸成為了我們的首選。

一、簡介

gRPC 是一種高性能、開源的遠(yuǎn)程過程調(diào)用(RPC)框架,基于 HTTP/2 協(xié)議,支持雙向流、頭部壓縮等特性。它默認(rèn)使用 Protocol Buffers(Protobuf)作為接口定義語言(IDL)和數(shù)據(jù)序列化格式,適用于微服務(wù)、實(shí)時(shí)通信等場景。

在 .NET Core(.NET 8)中,gRPC 提供了原生的支持,我們可以輕松創(chuàng)建 gRPC 服務(wù)端和客戶端,并將其集成到 Web API 或其他應(yīng)用中。

本文將圍繞以下幾個(gè)方面介紹如何在 .NET Core (.NET 8) 中使用 gRPC:

  • 創(chuàng)建 gRPC 服務(wù)端
  • 創(chuàng)建 gRPC 客戶端
  • 在 Web API 中集成 gRPC

二、創(chuàng)建 gRPC 服務(wù)端

1. 創(chuàng)建 gRPC 項(xiàng)目

首先,使用 .NET CLI 創(chuàng)建一個(gè) gRPC 服務(wù)端項(xiàng)目。也可以通過VS2022直接進(jìn)行創(chuàng)建。

dotnet new grpc -o GrpcDemo.Service
cd GrpcDemo.Service

這將創(chuàng)建一個(gè)包含 gRPC 模板的項(xiàng)目,其中包含一個(gè)示例的 gRPC 服務(wù)。

2. 編寫自己的服務(wù)

在 Protos 文件夾中,默認(rèn)會(huì)生成一個(gè) greet.proto 文件。我們可以修改或創(chuàng)建新的 .proto 文件來定義自己的服務(wù)。

例如,創(chuàng)建一個(gè) order.proto 文件:

syntax = "proto3";

option csharp_namespace = "GrpcDemo.Service";

package order;

// 訂單服務(wù)定義
service Order {
  // 創(chuàng)建訂單
rpc CreateOrder (CreateRequest) returns (CreateResult);
  //查詢訂單
rpc QueryOrder (QueryRequest) returns (QueryResult);
}

//創(chuàng)建訂單請求參數(shù)
message CreateRequest {
  string OrderNo = 1;
  string OrderName=2;
  double Price=3;
}

//創(chuàng)建訂單返回結(jié)果
message CreateResult {
  bool IsSuccess = 1; // 是否成功
  string Message = 2; // 錯(cuò)誤信息
}

//查詢訂單請求參數(shù)
message QueryRequest{
  int32 Id=1;
}
//查詢訂單返回結(jié)果
message QueryResult{
  int32 Id=1;
  string OrderNo=2;
  string OrderName=3;
  double Price=4;
}

接下來,在 Services 文件夾中實(shí)現(xiàn)服務(wù)邏輯。創(chuàng)建一個(gè) OrderService.cs 文件:

using Grpc.Core;

namespace GrpcDemo.Service.Services
{
    public class OrderService : Order.OrderBase
    {
        private readonly ILogger<OrderService> _logger;
        public OrderService(ILogger<OrderService> logger)
        {
            _logger = logger;
        }
        /// <summary>
        /// 創(chuàng)建訂單
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task<CreateResult> CreateOrder(CreateRequest request, ServerCallContext context)
        {
            //報(bào)存數(shù)據(jù)庫 todo

            return Task.FromResult(new CreateResult
            {
                IsSuccess = true,
                Message = "訂單創(chuàng)建成功"
            });
        }
        /// <summary>
        /// 查詢訂單
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task<QueryResult> QueryOrder(QueryRequest request, ServerCallContext context)
        {
            //查詢數(shù)據(jù)庫 //todo

            return Task.FromResult(new QueryResult
            {
                    Id = request.Id,
                    OrderNo = DateTime.Now.ToString("yyyyMMddHHmmss"),
                    OrderName = "年貨大禮包",
                    Price = 699
            });
        }
    }
}

在 Program.cs 中注冊服務(wù):

using GrpcDemo.Service.Services;

var builder = WebApplication.CreateBuilder(args);

// 添加 gRPC 服務(wù)
builder.Services.AddGrpc();

var app = builder.Build();

// 映射 gRPC 服務(wù)
app.MapGrpcService<OrderService>();

app.Run();

運(yùn)行項(xiàng)目后,gRPC 服務(wù)端將啟動(dòng)并監(jiān)聽指定的端口。

三、創(chuàng)建 gRPC 客戶端

1. 創(chuàng)建客戶端項(xiàng)目

使用 .NET CLI 創(chuàng)建一個(gè)控制臺(tái)項(xiàng)目作為 gRPC 客戶端:

dotnet new console -o GrpcDemo.Client
cd GrpcDemo.Client

2. 添加 gRPC 客戶端依賴

在客戶端項(xiàng)目中,添加 Grpc.Net.Client 和 Google.Protobuf 包:

dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools

將服務(wù)端的 order.proto 文件復(fù)制到客戶端項(xiàng)目的 Protos 文件夾中,并在 .csproj 文件中添加以下內(nèi)容以生成 C# 代碼:

3. 編寫客戶端代碼

在 Program.cs 中編寫 gRPC服務(wù)HTTPS調(diào)用的代碼:

static void Main(string[] args)
{
    Console.WriteLine("Hello, World!");
    //常規(guī)使用,https
    string url = "https://localhost:7231";
    using (var channel = GrpcChannel.ForAddress(url))
    {
        var client = new Order.OrderClient(channel);
        var reply = client.CreateOrder(new CreateRequest()
        {
            OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            OrderName = "年貨大禮包",
            Price = 699
        });

        Console.WriteLine($"Grpc服務(wù)https的調(diào)用結(jié)果:{reply.IsSuccess},message:{reply.Message}");
    }
    Console.ReadKey();

}

結(jié)果:

如果 gRPC 服務(wù)端使用 HTTP(非 HTTPS),可以在客戶端中直接使用 HTTP 地址:

 //使用http
 AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
 string url = "http://localhost:5147";

 using (var channel = GrpcChannel.ForAddress(url))
 {
     var client = new Order.OrderClient(channel);
     var reply = client.CreateOrder(new CreateRequest()
     {
         OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
         OrderName = "年貨大禮包",
         Price = 699
     });

     Console.WriteLine($"gGrpc內(nèi)網(wǎng)http調(diào)用結(jié)果:{reply.IsSuccess},message:{reply.Message}");
 }
 Console.ReadKey();

結(jié)果:

四、Web API 中加入 gRPC

在 Web API 項(xiàng)目中,可以同時(shí)提供 RESTful API 和 gRPC 服務(wù)。以下是如何在 Web API 中集成 gRPC 的步驟:

1. 添加 gRPC 服務(wù)

在 Program.cs 中注冊 gRPC 服務(wù):

var builder = WebApplication.CreateBuilder(args);

// 添加 gRPC 服務(wù)
builder.Services.AddGrpc();

var app = builder.Build();

// 映射 gRPC 服務(wù)
app.MapGrpcService<OrderService>();

app.Run();

2. 提供 RESTful API

在 Web API 中,可以通過控制器提供 RESTful API,并在內(nèi)部調(diào)用 gRPC 服務(wù):

using Microsoft.AspNetCore.Mvc;

namespace GrpcDemo.API.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class OrderController : ControllerBase
    {
        private readonly Order.OrderClient _client;

        public OrderController(Order.OrderClient client)
        {
            _client = client;
        }

        [HttpGet("create")]
        public async Task<IActionResult> CreateOrder()
        {
            var response = await _client.CreateOrderAsync(
                new CreateRequest { 
                    OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                    OrderName = "年貨大禮包", 
                    Price = 699
                });
            return Ok(response);
        }

    }
}

3. 配置 gRPC 客戶端

在 Program.cs 中注冊 gRPC 客戶端:

 builder.Services.AddGrpcClient<Order.OrderClient>(options =>
 {
     options.Address = new Uri("http://localhost:5147");
 });

結(jié)果:

總結(jié)

在 .NET Core 中,gRPC 提供了高性能的通信方式,適用于微服務(wù)、實(shí)時(shí)通信等場景。我們可以輕松創(chuàng)建 gRPC 服務(wù)端和客戶端,并將其集成到 Web API 中。

關(guān)鍵點(diǎn):

  • 使用 .proto 文件定義服務(wù)接口。
  • 實(shí)現(xiàn) gRPC 服務(wù)端邏輯。
  • 在客戶端中調(diào)用 gRPC 服務(wù)。
  • 在 Web API 中集成 gRPC,提供 RESTful API 和 gRPC 服務(wù)。

通過以上步驟,我們就可以在 .NET Core 項(xiàng)目中充分利用 gRPC 的優(yōu)勢,構(gòu)建高效的分布式系統(tǒng)。

以上就是.NET8中g(shù)RPC的使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于.NET8 gRPC的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論