.NET CoreでのgRPCの使用
gRPCは言語に関係のない高性能リモートプロシージャ呼び出し(RPC)フレームワークである. https://grpc.io/docs/guides/ https://github.com/grpc/grpc-dotnet https://docs.microsoft.com/zh-cn/aspnet/core/grpc
“
gRPCの主な利点現代高性能軽量級RPCフレームワーク. 協定優先API開発は、デフォルトでプロトコルバッファを使用し、言語に関係のない実装を許可する. は、強力なタイプのサーバおよびクライアントを生成するために、複数の言語のツールで使用することができる. は、クライアント、サーバ、および双方向ストリーム処理呼び出しをサポートします. Protobufバイナリシーケンス化を使用して、ネットワークの使用を削減します.
“
これらの利点はgRPCを効率が重要な軽量レベルのマイクロサービス. は、開発のために複数の言語を必要とするPolyglotシステムである. は、ストリーミング処理要求または応答を処理するポイント・ツー・ポイント・リアルタイム・サービスを必要とする.
gRPCは今とても簡単です.NET CoreとASP.NET Coreで使用され、すでにオープンソースであり、現在はマイクロソフトの公式ASP.NETプロジェクトの人員はメンテナンスを行い、良好なアクセスを行う.NET Coreエコ.
次に、gRPCの使用方法について説明する、gRPCを使用するために必要である.NET Core 3.1以上のSDKサポート.gRPCはサービス側とクライアントに分かれているので、2つのプロジェクトを新設し、1つのコンソールはクライアント
まずサービス側を完了し、
次いで、
gRPCはHTTP/2に基づいて通信するため、構成ファイルにKestrelを追加してHTTP/2を有効にする構成が必要です.
gRPCは従来のapiとは異なり, gRPCサービスの定義. クライアントとサーバとの間で送信されるメッセージ.
protobufファイルの構文の詳細については、公式ドキュメント(protobuf)を参照してください.
マイクロソフトは
詳細については、次の文書を参照してください.https://docs.microsoft.com/zh-cn/aspnet/core/grpc/dotnet-grpc
解決アクセスフォルダルートディレクトリにProtoフォルダを追加し、
その後、このサービスを実装し、
リロードメソッド
構成ファイルで
サービス側の完了をサポートし、サービス側を起動して起動アドレスを取得します.https://localhost:5001.
次に、クライアント構成アドレスに行って、私たちが書いたサービスを呼び出します.開始する前に、クライアントソリューションで次のnugetパッケージを参照する必要があります.
サービス側とクライアントを起動して効果を見て、メッセージの送信とメッセージの取得に成功しました.
“
gRPCの主な利点
“
これらの利点はgRPCを
gRPCは今とても簡単です.NET CoreとASP.NET Coreで使用され、すでにオープンソースであり、現在はマイクロソフトの公式ASP.NETプロジェクトの人員はメンテナンスを行い、良好なアクセスを行う.NET Coreエコ.
次に、gRPCの使用方法について説明する、gRPCを使用するために必要である.NET Core 3.1以上のSDKサポート.gRPCはサービス側とクライアントに分かれているので、2つのプロジェクトを新設し、1つのコンソールはクライアント
gRPC_ClientDemo
、1つのASPとして使用する.NET Coreプロジェクトは、サービス端末gRPC_ServerDemo
として使用される.まずサービス側を完了し、
Grpc.AspNetCore
コンポーネントを追加します.Install-Package Grpc.AspNetCore
次いで、
Startup.cs
にservices.AddGrpc()
が追加される.public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
}
gRPCはHTTP/2に基づいて通信するため、構成ファイルにKestrelを追加してHTTP/2を有効にする構成が必要です.
{
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
}
gRPCは従来のapiとは異なり,
proto
ファイルを独自に定義する必要があり,gRPCは協定優先手法を用いてAPI開発を行う.デフォルトでは、プロトコルバッファはインタフェース設計言語(IDL)として使用されます.*protoファイルには次のものが含まれます.protobufファイルの構文の詳細については、公式ドキュメント(protobuf)を参照してください.
proto
ファイルは実際の開発では必ず複数存在しますが、ここではproto
ファイルを1つのフォルダに入れ、Protobuf
のLink
関連を利用すれば、proto
ファイルを1つ維持するだけでよいというテクニックがあります.マイクロソフトは
dotnet-grpc
を提供してくれましたNET Coreグローバルツール、次のコマンドを実行します.dotnet tool install -g dotnet-grpc
dotnet-grpc
は、Protobuf
参照を
項として追加するために用いることができる.csprojファイル:
詳細については、次の文書を参照してください.https://docs.microsoft.com/zh-cn/aspnet/core/grpc/dotnet-grpc
解決アクセスフォルダルートディレクトリにProtoフォルダを追加し、
hello.proto
protoファイルを新規作成し、2つのプロジェクトにそれぞれ接続します.hello.proto
の作成を開始し、SayHello
メソッドを追加します.syntax = "proto3";
package hello; //
//
service HelloService {
// SayHello
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
その後、このサービスを実装し、
GreeterService.cs
をサービス側に追加する.using Grpc.Core;
using Hello;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace gRPC_ServerDemo.Services
{
public class GreeterService : HelloService.HelloServiceBase
{
private readonly ILogger _logger;
public GreeterService(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger();
}
public override Task SayHello(HelloRequest request, ServerCallContext context)
{
_logger.LogInformation($"Sending hello to {request.Name}");
return Task.FromResult(new HelloReply { Message = "Hello " + request.Name });
}
}
}
HelloService.HelloServiceBase
は、proto
ファイルが自動的に生成するクラスです.リロードメソッド
SayHello()
が呼び出され、ログが記録され、クライアントから送信されたフィールドnameに戻る.構成ファイルで
GreeterService
サービスをルーティングパイプに追加app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
endpoints.MapGrpcService();
});
サービス側の完了をサポートし、サービス側を起動して起動アドレスを取得します.https://localhost:5001.
次に、クライアント構成アドレスに行って、私たちが書いたサービスを呼び出します.開始する前に、クライアントソリューションで次のnugetパッケージを参照する必要があります.
Install-Package Grpc.Net.Client
Install-Package Google.Protobuf
Install-Package Grpc.Tools
using Grpc.Net.Client;
using Hello;
using System;
using System.Threading.Tasks;
namespace gRPC_ClientDemo
{
class Program
{
static async Task Main(string[] args)
{
using var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new HelloService.HelloServiceClient(channel);
await UnaryCallExample(client);
}
private static async Task UnaryCallExample(HelloService.HelloServiceClient client)
{
var reply = await client.SayHelloAsync(new HelloRequest { Name = " Plus" });
Console.WriteLine("Greeting: " + reply.Message);
}
}
}
サービス側とクライアントを起動して効果を見て、メッセージの送信とメッセージの取得に成功しました.