آموزش gRPC در ASP.NET Core – قسمت اول

آموزش gRPC در ASP.NET Core – قسمت اول

آموزش gRPC در ASP.NET Coreجی آر پی سی(gRPC) یک فریمورک رایگان، قدرتمند، مدرن، پر سرعت و متن بازِ RPC است.به صورت کلی 3 نوع مدل برای طراحی API وجود دارد.SOAPRESTRPC (Remote procedure call)فریمورک gRPC به ما اجازه میدهد که API هایی از نوع RPC بسازیم.این نوع API ها به Client ها اجازه میدهند که متدهای قرار گرفته در Server را در برنامه خودشان فراخوانی کنند به شکلی که انگار متدها واقعا در برنامه خودشان پیاده سازی شده است.مثال:در تصویر زیر برنامه Server دارای یک متد به نامGetOrder است.public Order GetOrder(int num);حالا gRPC چیکار میکنه دقیقا ؟ اجازه میده به Client ها که دقیقا این متد رو داخل برنامه خودشون فراخوانی کنن و از خروجی اش استفاده کنن.مکانیزم RPCامکان پیاده سازی معماری Microservices را به ما میدهد.پر سرعت است.از پروتکل HTTP/2 و قابلیت هایش استفاده میکند.ارائه قابلیت فوق العاده جذاب Streaming به 3 صورت مختلف.داده ها را به Binary Format سریالایز میکند.از XML و JSON سریع تر، سبک تر، ساده تر است.به صورت پیش فرض امن است.امکان استفاده در بیشتر زبان های برنامه نویسیپروتکل بافر یک سریالایزرِ Binary است.فریمورک gRPC به صورت پیش فرض برای Serialize کردن داده ها از Protcol Buffer استفاده میکند.پروتکل بافر داده ها را به آرایه ای یا استریمی از byte ها تبدیل میکند، و به همین دلیل سبک تر و سرعتش نسبت به JSON و XML بالاتر است.فریمورک gRPC برای ساخت API ها از رویکرد contract-first استفاده میکند.رویکرد contract-first چیست ؟در این روش، ابتدا قبل از کد نوشتن باید متدهایی که قرار است در API مان ارائه بدهیم را به صورت کامل همراه با پارامتر هایشان را بنویسیم و سپس آن ها را پیاده سازی میکنیم.در فریمورک gRPC متد هایمان را باید در یک service قرار بدهیم، و پارامتر های آن ها را باید به صورت message تعریف کنیم، و سپس آن ها را در یک فایل با فرمت proto. قرار دهیم.message را دقیقا مثل DTO های خودمان تصور کنید.فایل proto محل قرارگیری متد ها و پارامتر هایی است که قراره در API مان به سرویس گیرندگان ارائه کنیم.( فایل ها proto را مثل یک قرارداد بین Client ها و Server ها تصور کنید ).در قسمت های بعدی به صورت کامل و عمیق با فایل های تنظیماتی proto آشنا می شویم.در ادامه قصد داریم که یک پروژه خیلی ساده را با فریمورک gRPC و ASP.NET Core پیاده سازی کنیم، در این پروژه Server یک متد برای جمع دو عدد با نوع داده long به Client ارائه میکند.در ابتدا یک پروژه ASP.NET Core به صورت Empty میسازیم.2. سپس پکیج Grpc.AspNetCore را نصب میکنیم.Install-Package Grpc.AspNetCore -Version 2.34.0سپس طبق رویکرد first-contract اول باید متدها و پارامتر هایی که میخواهیم به بیرون ارائه کنیم را بنویسیم در نتیجه در فولدر Protos یک فایل proto به نام caluclator اضافه میکنیم.سپس باید در فایل ساخته شده متد ها و پارامتر های آن ها را بنویسیم.همانطور که مشاهده میکنید متد Sum یک ورودی به نام SumRequest دارد و یک خروجی از نوع SumResponse https://gist.github.com/ArminShoeibi/0ed2d7fe6b12d29fbab752b30f66ca30 وقتی که قرارداد رو نوشتیم، باید آن را توسط Protobuf Compiler کامپایل کنیم، در قسمت های بعدی در مورد این کامپایلر صحبت خواهیم کرد.وارد Properties فایل calculator.proto می شویم.مقدار های انتخاب شده برای 2 گزینه BuildAction و gRPC Stub Classes را طبق تصویر قرار دهید و سپس پروژه را Build کنید.وقتی که مرحله بالا را انجام دهید، Protobuf Compiler از روی آن فایل calculator.proto برای شما دو عدد فایل cs میسازد که در آن دو فایل کدهای سی شارپی زیادی ایجاد شده است، الان فقط برای پیاده سازی متد Sum باید از کلاس CalculatorServiceBase ارث بری کنیم.پس یک فولدر به نام GrpcServices ایجاد کنید و در آن یک کلاس به نام CalculatorGrpcService بسازید و سپس از کلاس CalculatorServiceBase ارث بری کنید.حالا باید متد Sum را پیاده سازی کنیم، Protobuf Compiler این متد را به صورت virtual در کلاس CalculatorServiceBase قرار داده است و ما باید آن را override کنیم.بعد از اینکه متد Sum رو override کردیم باید منطق خودمون در اون پیاده سازی کنیم. https://gist.github.com/ArminShoeibi/61561512c7b6207f0c9ba0c7b6a595b2 حالا که متد Sum تکمیل شد باید سرویس gRPC رو به DI Container پروژه مون اضافه کنیم.سپس میان افزار UseHttpsRedirection را هم اضافه کنید.و سپس کلاس CalculatorGrpcService رو هم در endpoint ها ثبت کنیم. https://gist.github.com/ArminShoeibi/6980cb25e9951210fe56e5dd34057bf0 بعد از این مرحله باید اجرای پروژه مون رو به دست Kestrel بسپاریم، چون هنوز IIS از gRPC پشتیبانی نمیکنه.طبق تصویر اجرای پروژه را به عهده Kestrel بزارید.خب الان پروژه سرور مون تکمیل شد و در اصل یک متد RPC به بیرون ارائه میکنه، و الان وقت ساختن یک پروژه Client است، در همان سولوشن یک پروژه Console اضافه کنید.سپس 3 پکیج در آن نصب کنید.Install-Package Grpc.Tools -Version 2.34.0
Install-Package Grpc.Net.Client -Version 2.34.0
Install-Package Google.Protobuf -Version 3.14.0سپس باید فایل proto ای که در سرور قرار گرفته است را در Client هم اضافه کنیم، به صورت زیر اینکار را انجام دهید.بعد از اینکه فایل اضافه شد، Solution را یکبار Build کنید.حالا باید بتونیم متد Sum رو در برنامه Console ای که ساختیم استفاده کنیم.حالا یک ارتباط با سرور برقرار میکنیم و سپس متد Sum را در برنامه خودمان فراخوانی میکنیم، آرگومان ورودی اش باید حتما بهش پاس بدیم. https://gist.github.com/ArminShoeibi/837347164542cba523e49ebc5143649a حالا که هم سرور و هم کلاینت کدهاشون رو نوشتیم باید فقط اجراشون کنیم.ولی اول باید ترتیب اجراهاشون رو تنظیم کنیم و سپس اجراشون کنیم.بعد از اینکه ترتیب اجراهارو تنظیم کردید، روی Start کلیک کنید.و همینطور که می بینید، 2 عدد ارسال شد به سرور و جواب جمع شون رو بهمون داد و ما جواب رو چاپ کردیم.در قسمت های بعدی به طور کامل و عمیق در مورد تمامی اجزای gRPC و کامپایلر آن یعنی protoc را صحبت خواهیم کرد.سورس کد پروژه: https://github.com/ArminShoeibi/DNZ.Calculator-gRPC مقالات بیشتر در کانال دات نت زومhttps://t.me/DotNetZoom

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *