Jeśli napotkasz problemy, zapoznaj się z sekcjami poniżej.
Stan utraconego urządzenia w Fleet Engine
Podczas pracy z Fleet Engine zaprojektuj wdrożenie tak, aby przewidywać awarie. Jeśli na przykład wyślesz do Fleet Engine żądanie aktualizacji pojazdu, może ona odpowiedzieć błędem wskazującym, że pojazd nie istnieje. Implementacja powinna następnie ponownie utworzyć pojazd w nowym stanie.
W wyjątkowo mało prawdopodobnym scenariuszu katastrofalnej awarii Fleet Engine może być konieczne ponowne utworzenie większości lub wszystkich pojazdów i zadań. Jeśli tempo tworzenia stanie się zbyt wysokie, niektóre żądania mogą ponownie zakończyć się niepowodzeniem z powodu problemów z limitem, ponieważ w celu uniknięcia ataków typu DoS (odmowa usługi) wprowadzono sprawdzanie limitów. W takim przypadku zmniejsz częstotliwość ponownego tworzenia, stosując strategię wycofywania w przypadku ponownych prób.
Liczba ponownych prób
Upewnij się, że system implementuje ponawianie prób wysyłania żądań do Fleet Engine, ponieważ czasami mogą one się nie powieść. Biblioteki klienta Fleet Engine domyślnie ponawiają próby.
Utrata stanu w aplikacji dla kierowców
Jeśli aplikacja dla kierowców 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ż ponownie utworzyć i wyraźnie ustawić listę przystanków dla pakietu Driver SDK.
Uwaga: przywracanie musi odbywać się autonomicznie, bez korzystania z informacji z Fleet Engine, z wyjątkiem błędów wskazujących, czy i kiedy podmiot już istnieje w bazie danych. Jeśli element już istnieje, można zignorować ten błąd i zaktualizować element za pomocą jego identyfikatora.
Błędy przekroczenia terminu
Jeśli podczas wywoływania Fleet Engine pojawi się 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 Javie, 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 listę typowych błędów API, które mogą wystąpić, ich przyczyny i sposoby ich rozwiązania.
NOT_FOUND (HTTP 404)
Nie udało się znaleźć żądanej encji (np. pojazdu, przejazdu lub zadania).
- Przyczyna: zwykle jest spowodowany próbą pobrania, zaktualizowania lub usunięcia jednostki za pomocą identyfikatora, który nie istnieje w bazie danych.
- Rozwiązanie: przed próbą uzyskania dostępu do elementu sprawdź, czy identyfikator elementu jest prawidłowy i czy element został utworzony.
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 przypadku żądania 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 roszczeń lub gdy konto usługi podpisujące JWT nie ma wymaganych ról uprawnień. Na przykład „JWT does not contain a matching scope for requested trip.”
- Rozwiązanie: sprawdź uprawnienia konta usługi i upewnij się, że roszczenia JWT zawierają prawidłowe zakresy dla podmiotu, do którego próbujesz uzyskać dostęp.
INVALID_ARGUMENT (HTTP 400)
Co najmniej 1 argument przekazany w żądaniu jest nieprawidłowy.
- Przyczyna: może się to 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: najczęstsze przyczyny to próba zmiany stanu przejazdu
COMPLETElubCANCELEDalbo próba przypisania zadaniaCLOSEDdo pojazdu. - Rozwiązanie: upewnij się, że bieżący stan podmiotu umożliwia wykonanie operacji, którą próbujesz przeprowadzić. Sprawdź komunikat o błędzie, aby dowiedzieć się, w którym stanie doszło do naruszenia zasad.
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ć przy użyciu algorytmu wzrastający czas do ponowienia.