.NET 6.0 — реализация сервера и клиента gRPC

В этой статье мы узнаем об основах gRPC, его использовании и, наконец, реализуем сервер и клиент с помощью .NET Core 6.0.

Объяснение gRPC:

gRPC (Google Remote Procedure Calls) был изначально создан компанией Google, которая уже более десяти лет использует единую инфраструктуру RPC общего назначения под названием Stubby для соединения большого количества микросервисов, работающих в ее центрах обработки данных и между ними.
В марте 2015 года Google решил создать следующую версию Stubby и сделать ее с открытым исходным кодом, в результате чего появился gRPC.

  • gRPC — это современный высокопроизводительный фреймворк удаленного вызова процедур (RPC) с открытым исходным кодом.
  • Он реализует API с использованием HTTP/2, который может работать в любой среде.
  • gRPC состоит из двух частей
    • Протокол gRPC — как уже упоминалось выше, он использует HTTP/2, что обеспечивает множество преимуществ по сравнению с традиционным Http1.x
    • Сериализация данных — по умолчанию gRPC использует Protobuf для сериализации и в качестве посредника между клиентом и сервером.
  • Клиенты и серверы gRPC взаимодействуют между собой, используя различные среды и машины.
  • Он поддерживает множество языков, таких как Java, C#, Go, Ruby и Python, полный список можно посмотреть здесь.
  • Он поддерживает подключаемый аутентификатор, трассировку, балансировку нагрузки и проверку работоспособности.

Различные сценарии, в которых мы используем gRPC

  • Когда мы используем микросервисную архитектуру и используем ее для внутренней коммуникации одного или нескольких серверов.
  • gRPC удобен, когда производительность имеет высокий приоритет при низкой задержке.
  • Он полезен, когда нам требуется дуплексная связь между сервисами с различными типами данных.
  • gRPC полезен на последней миле распределенных вычислений для подключения устройств, мобильных приложений и браузеров к внутренним сервисам.

gRPC в сравнении с REST:

REST является одним из наиболее часто используемых API-фреймворков, а gRPC привлекает к себе внимание, давайте посмотрим на сравнение по различным параметрам.

REST gRPC
Протокол HTTP/1.1 HTTP/2.0
Модель запроса-ответа Поддерживает только запрос-ответ, как основано на HTTP/1.1 Поддерживает все виды потоковой передачи данных на основе HTTP/2
Сериализация JSON/XML protobuf
Формат полезной нагрузки Сериализация как JSON/XML Сильная типизация
Поддержка браузеров Да Нет

Плюсы и минусы gRPC:

Плюсы

  • Благодаря дуплексной связи, он поддерживает двунаправленную потоковую передачу с транспортом на основе HTTP/2
  • Производительность — один из главных аргументов в пользу gRPC, он быстрее, чем REST и SOAP.
  • Службы gRPC высокоэффективны в проводном режиме и имеют простую структуру определения служб.
  • Сообщения gRPC легковесны по сравнению с другими типами, такими как JSON.
  • Клиентские библиотеки поддерживают 11 языков

Минусы

  • Поддержка браузеров очень ограничена.
  • Поскольку используются двоичные данные, которые нелегко читать по сравнению с JSON или XML.

Реализация gRPC

Необходимые условия

  • Visual Studio 2022
  • .NET 6.0

Настройте службу gRPC:

  • Откройте Visual Studio 2022 и создайте новый проект gRPC с именем GrpcCoreService и выберите .NET 6.0 в опции Framework.
  • Просмотрите структуру папок проекта по умолчанию.

    • Protos: содержит все файлы активов сервера gRPC, такие как greet.proto.
    • Services: Содержит реализацию служб gRPC.
    • Корневая папка: appSettings.json содержит конфигурацию сервиса, а Program.cs содержит код, который настраивает поведение приложения.
  • Щелкните правой кнопкой мыши на greet.proto, выберите Properties и убедитесь, что gRPC Stub Classes установлен на Server only.

Настройте клиентское приложение:

  • Добавьте проект консольного приложения с именем GrpcClientApp и выберите необходимые конфигурации.
  • Добавьте необходимые пакеты в проект клиентского приложения.
  Install-Package Grpc.Net.Client
  Install-Package Google.Protobuf
  Install-Package Grpc.Tools
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • Создайте папку Protos и скопируйте в нее файл Protosgreet.proto из GrpcCoreService.
  • Обновите пространство имен внутри файла greet.proto до пространства имен проекта:
  option csharp_namespace = "GrpcClientApp";
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • После этого щелкните правой кнопкой мыши на greet.proto, выберите Properties и установите для gRPC Stub Classes значение Client only.

  • Наконец, отредактируйте файл проекта GrpcClientApp.csproj:

  <ItemGroup>
    <Protobuf Include="Protosgreet.proto" GrpcServices="Client" />
  </ItemGroup>
Войдите в полноэкранный режим Выйти из полноэкранного режима
  • После этого обновите файл Program.cs, чтобы вызвать службу greeter.

Убедитесь, что используется номер порта, указанный в файле launchSettings.json проекта GrpcCoreService.

Запустите и протестируйте:

  • Настройка стартового проекта: Настройте оба проекта в качестве стартовых в соответствующем порядке.
  • Запустите проект и просмотрите вывод как службы gRPC, так и клиента в окне Console.
  • Окно службы gRPC:
  • Окно клиента gRPC:

Настройка новой службы и клиента:

До сих пор мы тестировали службу и клиента greeter по умолчанию.

Теперь давайте продвинемся вперед и настроим новую службу и клиента, который будет потреблять эту новую службу.

Настройка службы сотрудников:

  • Для начала добавьте файл employee.proto в папку Protos и добавьте следующий код.
  • В папку Services добавьте EmployeeService.cs и реализуйте его, как показано ниже.
  • Внедрите эту новую службу в Program.cs.
  app.MapGrpcService<EmployeeService>();
Вход в полноэкранный режим Выйдите из полноэкранного режима

Обновите клиентское приложение, чтобы оно потребляло сервис employee:

  • Скопируйте файл employee.proto из GrpcCoreService и обновите пространство имен:
  option csharp_namespace = "GrpcClientApp";
Войдите в полноэкранный режим Выйдите из полноэкранного режима
  • После этого щелкните правой кнопкой мыши на employee.proto, выберите Properties и установите для gRPC Stub Classes значение Client only.
  • И убедитесь, что файл proto добавлен в файл проекта GrpcClientApp.csproj:
  <ItemGroup>
    <Protobuf Include="Protosgreet.proto" GrpcServices="Client" />
    <Protobuf Include="Protosemployee.proto" GrpcServices="Client" />
  </ItemGroup>
Войдите в полноэкранный режим Выход из полноэкранного режима
  • Наконец, обновите файл Program.cs, чтобы вызвать службу employee.
  • После завершения изменений вы можете проверить папки и файлы в Solution Explorer.

Запустите и протестируйте новую службу:

  • Запустите проект и выполните поиск сотрудника, передав ему ID сотрудника в окне консоли.

ПРИМЕЧАНИЕ:

Ознакомьтесь со всем исходным кодом здесь.

Если у вас есть какие-либо замечания или предложения, пожалуйста, оставьте их в разделе комментариев ниже, а если вы нашли опечатку, предложение, которое можно улучшить, или что-то еще, что следует обновить в этой записи блога, пожалуйста, перейдите непосредственно в репозиторий блога и откройте новый pull request с вашими изменениями.

Оцените статью
devanswers.ru
Добавить комментарий