Tworzenie usługi gRPC w języku C#

1. Omówienie

gRPC to neutralna dla języka platforma i zbiór narzędzi opracowane przez Google do zdalnego wywoływania procedur (RPC). Umożliwia definiowanie usługi za pomocą buforów protokołów, czyli szczególnie zaawansowanych narzędzi i języka do serializacji plików binarnych. Następnie umożliwia generowanie idiomatycznych skrótów klientów i serwerów z definicji usługi w różnych językach.

Z tego ćwiczenia w Codelabs dowiesz się, jak za pomocą platformy gRPC utworzyć usługę w języku C# udostępniającą interfejs API. Z tej usługi możesz korzystać za pomocą klienta konsoli napisanego w języku C#, który korzysta z tego samego opisu usługi co usługa.

Czego się nauczysz

  • Język bufora protokołu.
  • Jak wdrożyć usługę gRPC za pomocą języka C#.
  • Jak wdrożyć klienta gRPC za pomocą języka C#.
  • Jak zaktualizować usługę gRPC.

Czego potrzebujesz

Jak wykorzystasz ten samouczek?

Tylko do przeczytania Przeczytaj go i wykonaj ćwiczenia

Jak oceniasz swoje doświadczenia z Google Cloud Platform?

Początkujący Poziom średnio zaawansowany Biegły
.

2. Pobierz i utwórz przykłady C# gRPC

Pobierz przykłady

Pobierz przykładowe repozytorium gRPC C# jako plik ZIP i rozpakuj je.

Możesz też skopiować jego repozytorium Git.

git clone https://github.com/meteatamel/grpc-samples-dotnet.git

W obu przypadkach musisz mieć folder grpc-samples-dotnet z tą zawartością:

d056832ff4ce0c8f.png

Utwórz rozmowę

Przykładowy folder aplikacji zawiera GrpcSamples.sln – rozwiązanie Visual Studio. Kliknij dwukrotnie, aby otworzyć rozwiązanie w Visual Studio. Powinno pojawić się rozwiązanie z większą liczbą projektów.

61da9ddc86c08019.png

W następnej sekcji omówimy bardziej szczegółowo projekty, ale najpierw zajmijmy się tylko stworzeniem projektu. Przejdź do Build > Build Solution lub Ctrl + Shift + B, aby utworzyć rozwiązanie. Spowoduje to pobranie wszystkich zależności z NuGet, a następnie skompilowanie aplikacji.

Na koniec w danych wyjściowych konsoli Visual Studio powinien pojawić się komunikat Build succeeded.

3. Poznaj fragment Greeter

Greeter to prosty przykład gRPC, w którym klient wysyła żądanie z nazwą, a serwer odpowiada z komunikatem, po którym następuje nazwa. Istnieje projekt Greeter zawierający definicję usługi (plik protokołu), na której opierają się klient i serwer.

Projekt Greeter

Jest to wspólny projekt używany przez klienta i serwer. Zawiera on greeter.proto, który jest definicją usługi gRPC używaną przez klient i serwer. Definicja usługi definiuje usługę gRPC o nazwie GreetingService i ma ona metodę greeting, która przyjmuje HelloRequest jako dane wejściowe i HelloResponse jako dane wyjściowe.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
}

Jest to metoda jednoargumentowa (brak strumieniowania), w której klient wysyła jedno żądanie i otrzymuje jedną odpowiedź z serwera. Możesz zapoznać się z pozostałą zawartością greeter.proto.. Ten projekt zawiera też skrypt o nazwie generate_protos.bat, którego można użyć do generowania atrakcji klienta i serwera z pliku proto. Projekt zawiera już wygenerowane atrapy klienta i serwera, więc nie musisz ich generować samodzielnie. Jeśli jednak zmienisz coś w pliku definicji usługi, musisz uruchomić ten skrypt, aby ponownie wygenerować atrapy.

Serwer powitalny

To jest projekt serwera gRPC. Program.cs to główny punkt wejścia, w którym konfigurowana jest implementacja portu i serwera. Ważna klasa to GreeterServiceImpl.cs. Zawiera on metodę greeting, w której zaimplementowano właściwą funkcję.

public override Task<HelloResponse> greeting(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Hello " + request.Name });
}

Klient powitalny

To jest strona klienta usługi gRPC. Również Program.cs jako punkt wejścia. Tworzy kanał komunikacyjny z serwerem, a następnie tworzy klienta korzystającego z kanału z wygenerowanego namiaru. Następnie tworzy żądanie i wysyła je do serwera przy użyciu atrapy klienta.

4. Uruchamianie przykładowego programu Greeter

Najpierw uruchom serwer powitalny. Otwórz wiersz polecenia i przejdź do folderu bin > Debug na serwerze Greeter, a następnie uruchom plik wykonywalny. Serwer powinien nasłuchiwać.

> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...

Następnie uruchom klienta Greeter. W osobnym wierszu poleceń przejdź do folderu bin > Debug na serwerze Greeter i uruchom plik wykonywalny. Powinien pojawić się klient wysyłający żądanie i otrzymujący odpowiedź z serwera.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...

5. Aktualizowanie fragmentu powitalnego

Zobaczmy, jak wygląda aktualizacja naszej usługi. Dodaj do naszej usługi gRPC nową metodę o nazwie „do widzenia”, która zwraca „do widzenia” zamiast „hello” dla klienta.

Pierwszym krokiem jest zaktualizowanie pliku definicji usługi greeter.proto.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
    
    rpc goodbye(HelloRequest) returns (HelloResponse);
}

Następnie musisz ponownie wygenerować atrapy klienta i serwera. W wierszu polecenia uruchom polecenie generate_protos.bat. Po wygenerowaniu wersji pośrednich może być konieczne odświeżenie projektów Visual Studio w celu pobrania zaktualizowanego kodu.

Na koniec zaktualizuj kod klienta i serwera, aby zacząć korzystać z nowej metody. W usłudze zaktualizuj metodę GreeterServiceImpl.cs i dodaj nową metodę goodbye.

public override Task<HelloResponse> goodbye(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Goodbye " + request.Name });
}

Wywołaj z poziomu klienta metodę goodbye w Program.cs.

response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: " 
                       + response.Greeting);

Skompiluj projekt od nowa oraz jeszcze raz uruchom serwer i klienta. Teraz klient powinien otrzymać wiadomość pożegnalną.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...

6. Poznawanie fragmentu Google Chat

W rozwiązaniu znajdują się również projekty ChatServer i ChatWindowsClient. Jak sama nazwa wskazuje, jest to para klient i serwer dla prostej aplikacji czatu. Projekt Chat ma plik definicji usługi o nazwie chat.proto. Definiuje funkcję ChatService z metodą chat.

service ChatService {
 rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}

Pamiętaj, że zarówno przychodzące, jak i wychodzące wiadomości czatu są oznaczane za pomocą słowa kluczowego stream. Zasadniczo powoduje to zmianę połączenia w dwukierunkowy strumień, z którego klient i serwer mogą w dowolnym momencie wysyłać do siebie wiadomości. to idealne rozwiązanie dla aplikacji do obsługi czatu.

Możesz dokładniej zapoznać się z przykładem, skompilować go i uruchomić, aby zobaczyć, jak to działa.

7. Gratulacje!

Omówione zagadnienia

  • język bufora protokołu.
  • Jak wdrożyć usługę gRPC za pomocą języka C#.
  • Jak wdrożyć klienta gRPC za pomocą języka C#.
  • Jak zaktualizować usługę gRPC.

Następne kroki