Jeśli napotkasz problemy, zapoznaj się z sekcjami poniżej.
Stan utracony we Fleet Engine
Podczas pracy z Fleet Engine zaprojektuj implementację tak, aby przewidywała błędy. Jeśli na przykład wyślesz do Fleet Engine żądanie aktualizacji pojazdu, może on odpowiedzieć błędem wskazującym, że pojazd nie istnieje. Twoja implementacja powinna następnie odtworzyć pojazd w nowym stanie.
W bardzo mało prawdopodobnym przypadku poważnej awarii Fleet Engine może być konieczne ponowne utworzenie większości lub wszystkich pojazdów i zadań. Jeśli częstotliwość tworzenia stanie się zbyt wysoka, niektóre żądania mogą ponownie zakończyć się niepowodzeniem z powodu problemów z limitami, ponieważ limity są sprawdzane, aby uniknąć ataków typu DoS. W takim przypadku zmniejsz częstotliwość ponownego tworzenia, stosując strategię wycofywania się w przypadku ponownych prób.
Liczba ponownych prób
Upewnij się, że Twój system ponawia próby wysyłania żądań do Fleet Engine, ponieważ mogą one czasami kończyć się niepowodzeniem. Biblioteki klienta Fleet Engine domyślnie ponawiają próby.
Utrata stanu w aplikacji dla kierowców
Jeśli aplikacja kierowcy ulegnie awarii, musi odtworzyć bieżący stan w pakiecie Driver SDK. Aplikacja powinna spróbować odtworzyć zadania, aby upewnić się, że istnieją, i przywrócić ich bieżące stany. Aplikacja powinna też odtworzyć i wyraźnie ustawić listę przystanków dla pakietu Driver SDK.
Uwaga: te przywrócenia muszą być wykonywane autonomicznie, bez polegania na informacjach z Fleet Engine, z wyjątkiem błędów wskazujących, czy i kiedy dany element już istnieje w bazie danych. Jeśli encja już istnieje, błąd można zignorować, a encję zaktualizować za pomocą jej identyfikatora.
Błędy związane z przekroczeniem limitu czasu
Jeśli podczas wywoływania Fleet Engine wystąpi błąd DEADLINE_EXCEEDED, oznacza to, że żądanie trwało dłużej niż skonfigurowany limit czasu. Biblioteki klienta Fleet Engine mają domyślne limity czasu, ale może być konieczne ich dostosowanie.
Ogólne informacje o terminach gRPC znajdziesz w artykule gRPC i terminy.
Aby skonfigurować termin podczas korzystania z biblioteki klienta Fleet Engine w języku Java, możesz dostosować ustawienia ponawiania RPC. Poniższy przykład pokazuje, jak skonfigurować niestandardowy limit czasu podczas konfigurowania VehicleService:
VehicleServiceSettings.Builder settingsBuilder = VehicleServiceSettings.newBuilder();
// Set the timeout to 10 seconds.
settingsBuilder
.getVehicleSettings()
.setRetrySettings(
settingsBuilder.getVehicleSettings().getRetrySettings().toBuilder()
.setTotalTimeout(java.time.Duration.ofSeconds(10))
.build());
VehicleServiceClient client = VehicleServiceClient.create(settingsBuilder.build());
Typowe błędy interfejsu API
W tej sekcji znajdziesz typowe błędy interfejsu API, ich przyczyny i sposoby ich rozwiązywania.
NOT_FOUND (HTTP 404)
Nie udało się znaleźć żądanej encji (np. pojazdu, przejazdu lub zadania).
- Przyczyna: zwykle jest to spowodowane próbą pobrania, zaktualizowania lub usunięcia encji przy użyciu identyfikatora, który nie istnieje w bazie danych.
- Rozwiązanie: zanim spróbujesz uzyskać dostęp do encji, sprawdź, czy jej identyfikator jest prawidłowy i czy została ona utworzona.
ALREADY_EXISTS (HTTP 409)
Encja, którą próbujesz utworzyć, już istnieje.
- Przyczyna: wywołanie metody tworzenia (np.
CreateVehiclelubCreateTrip) z identyfikatorem, który jest już używany. - Rozwiązanie: zaktualizuj istniejący element lub użyj nowego unikalnego identyfikatora w żądaniu utworzenia.
PERMISSION_DENIED (HTTP 403)
Nie masz wymaganych uprawnień, aby zrealizować prośbę.
- Przyczyna: zwykle dzieje się tak, gdy w tokenie internetowym JSON (JWT) brakuje prawidłowych oświadczeń lub gdy konto usługi podpisujące token JWT nie ma wymaganych ról uprawnień. Na przykład: „JWT does not contain a matching scope for requested trip” (JWT nie zawiera pasującego zakresu dla żądanej podróży).
- Rozwiązanie: sprawdź uprawnienia konta usługi i upewnij się, że oświadczenia JWT zawierają prawidłowe zakresy dla podmiotu, do którego próbujesz uzyskać dostęp.
INVALID_ARGUMENT (HTTP 400)
Co najmniej 1 z argumentów przekazanych w żądaniu jest nieprawidłowy.
- Przyczyna: może się tak zdarzyć z różnych powodów, np. podania wartości spoza zakresu (np. maksymalnej pojemności), braku wymaganego pola (np.
VehicleType) lub podania nieprawidłowych współrzędnych punktu odbioru. - Rozwiązanie: sprawdź komunikat o błędzie dotyczący konkretnego nieprawidłowego pola i upewnij się, że żądanie jest zgodne ze specyfikacją interfejsu API.
FAILED_PRECONDITION (HTTP 400)
Operacja została odrzucona, ponieważ system nie znajduje się w stanie wymaganym do jej wykonania.
- Przyczyna: typowe przyczyny to próba zmiany stanu przejazdu
COMPLETElubCANCELEDna inny albo próba przypisania zadaniaCLOSEDdo pojazdu. - Rozwiązanie: upewnij się, że bieżący stan encji umożliwia wykonanie operacji, którą próbujesz przeprowadzić. Sprawdź komunikat o błędzie, aby dowiedzieć się, jakie naruszenia wystąpiły w danym stanie.
UNAVAILABLE (HTTP 503)
Usługa jest niedostępna.
- Przyczyna: oznacza to przejściowy problem z usługą Fleet Engine.
- Rozwiązanie: żądanie można bezpiecznie ponowić ze wzrastającym czasem do ponowienia.