C# (.NET) के लिए gRPC: लाइब्रेरी और उदाहरण
gRPC एक हाई-परफॉर्मेंस RPC (Remote Procedure Call) फ्रेमवर्क है जिसे Google ने बनाया है। यह HTTP/2 और Protocol Buffers (protobuf) पर आधारित है। .NET इकोसिस्टम में, gRPC माइक्रोसर्विसेज के बीच संवाद का मानक बन गया है, जो सख्त टाइपिंग, द्विदिश स्ट्रीमिंग और कम लेटेंसी प्रदान करता है। इस लेख में हम C# में gRPC के लिए मुख्य लाइब्रेरी और सर्वर-क्लाइंट सेटअप के व्यावहारिक उदाहरण देखेंगे।
.NET के लिए मुख्य gRPC लाइब्रेरी
.NET में gRPC के लिए NuGet से निम्नलिखित पैकेज उपयोग किए जाते हैं:
- Grpc.AspNetCore — ASP.NET Core में gRPC सर्वर को एकीकृत करता है (होस्टिंग के लिए अनुशंसित)।
- Grpc.Net.Client — .NET (जिसमें .NET Core, .NET 5+ शामिल हैं) के लिए क्लाइंट लाइब्रेरी।
- Grpc.Tools —
.protoफ़ाइलों से कोड जनरेटर (.csprojमेंProtobufआइटम के रूप में जोड़ा जाता है)। - Google.Protobuf — protobuf संदेशों के साथ काम करने के लिए।
ये सभी पैकेज Microsoft द्वारा समर्थित हैं और सक्रिय रूप से विकसित किए जा रहे हैं। इन्हें NuGet Package Manager या dotnet CLI के माध्यम से इंस्टॉल करें:
dotnet add package Grpc.AspNetCore
dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools
C# में gRPC सर्वर बनाना
आइए ऑर्डर के साथ काम करने के लिए एक सरल सेवा बनाने की चरण-दर-चरण प्रक्रिया देखें।
1. proto-फ़ाइल परिभाषित करें
सर्वर प्रोजेक्ट (जैसे GrpcServer) में order.proto फ़ाइल बनाएं:
syntax = "proto3";
service OrderService {
rpc GetOrder (OrderRequest) returns (OrderResponse);
rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);
}
message OrderRequest {
int32 order_id = 1;
}
message OrderResponse {
int32 order_id = 1;
string status = 2;
double total = 3;
}
2. कोड जनरेशन के लिए .csproj सेट करें
.csproj फ़ाइल में यह जोड़ें:
<ItemGroup>
<Protobuf Include="order.proto" GrpcServices="Server" />
</ItemGroup>
3. सेवा को लागू करें
जनरेटेड बेस क्लास से इनहेरिट करते हुए एक क्लास बनाएं:
public class OrderServiceImpl : OrderService.OrderServiceBase
{
public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)
{
return Task.FromResult(new OrderResponse
{
OrderId = request.OrderId,
Status = "Shipped",
Total = 99.99
});
}
public override async Task SubscribeOrders(OrderRequest request,
IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context)
{
for (int i = 0; i < 5; i++)
{
await responseStream.WriteAsync(new OrderResponse
{
OrderId = request.OrderId,
Status = $"Update #{i}",
Total = 100 + i * 10
});
await Task.Delay(1000);
}
}
}
4. Program.cs में रजिस्टर करें
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
var app = builder.Build();
app.MapGrpcService<OrderServiceImpl>();
app.MapGet("/", () => "gRPC server is running");
app.Run();
C# में gRPC क्लाइंट बनाना
अब एक कंसोल एप्लिकेशन-क्लाइंट (GrpcClient) बनाते हैं।
1. तैयारी
order.proto को क्लाइंट प्रोजेक्ट में कॉपी करें और .csproj में यह निर्दिष्ट करें:
<Protobuf Include="order.proto" GrpcServices="Client" />
2. क्लाइंट कोड
using Grpc.Net.Client;
using GrpcClient;
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new OrderService.OrderServiceClient(channel);
// सरल RPC
var response = await client.GetOr