In den folgenden Abschnitten finden Sie Hilfe, wenn Probleme auftreten.
Status „Verloren“ in Fleet Engine
Wenn Sie mit Fleet Engine arbeiten, sollten Sie Ihre Implementierung so gestalten, dass sie auf Fehler vorbereitet ist. Wenn Sie beispielsweise eine Anfrage an Fleet Engine senden, um ein Fahrzeug zu aktualisieren, wird möglicherweise ein Fehler zurückgegeben, der angibt, dass das Fahrzeug nicht vorhanden ist. In Ihrer Implementierung sollte das Fahrzeug dann im neuen Zustand neu erstellt werden.
Im äußerst unwahrscheinlichen Fall eines katastrophalen Ausfalls von Fleet Engine müssen Sie möglicherweise die meisten oder alle Fahrzeuge und Aufgaben neu erstellen. Wenn die Erstellungsrate zu hoch wird, können einige Anfragen aufgrund von Kontingentproblemen fehlschlagen, da Kontingentprüfungen vorhanden sind, um DOS-Angriffe (Denial of Service) zu vermeiden. In diesem Fall sollten Sie die Neuerstellungsrate mit einer Backoff-Strategie für Wiederholungsversuche verlangsamen.
Wiederholungsversuche
Achten Sie darauf, dass Ihr System Wiederholungsversuche für Anfragen an die Fleet Engine implementiert, da diese gelegentlich fehlschlagen können. Fleet Engine-Clientbibliotheken führen standardmäßig Wiederholungsversuche durch.
Status in der Fahrer-App verloren
Wenn die Fahrer-App abstürzt, muss der aktuelle Status im Driver SDK neu erstellt werden. Die App sollte versuchen, Aufgaben neu zu erstellen, um sicherzustellen, dass sie vorhanden sind, und um ihren aktuellen Status wiederherzustellen. Die App sollte außerdem die Liste der Stopps für das Driver SDK neu erstellen und explizit festlegen.
Hinweis: Diese Wiederherstellungen müssen autonom erfolgen, ohne dass Informationen von Fleet Engine verwendet werden, mit Ausnahme von Fehlern, die angeben, ob und wann eine Entität bereits in der Datenbank vorhanden ist. Wenn eine Entität bereits vorhanden ist, kann dieser Fehler ignoriert und die Entität anhand ihrer ID aktualisiert werden.
Fehler wegen Überschreitung der Frist
Wenn Sie beim Aufrufen von Fleet Engine einen DEADLINE_EXCEEDED-Fehler erhalten, hat die Anfrage länger als das konfigurierte Zeitlimit gedauert. Für Fleet Engine-Clientbibliotheken sind Standardzeitlimits festgelegt, die Sie möglicherweise anpassen müssen.
Allgemeine Informationen zu gRPC-Deadlines finden Sie unter gRPC und Deadlines.
Wenn Sie die Fleet Engine Java-Clientbibliothek verwenden, können Sie die RPC-Wiederholungseinstellungen anpassen, um die Frist zu konfigurieren. Das folgende Beispiel zeigt, wie Sie beim Einrichten von VehicleService ein benutzerdefiniertes Zeitlimit konfigurieren:
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());
Häufige API-Fehler
In diesem Abschnitt werden häufige API-Fehler, ihre Ursachen und mögliche Lösungen aufgeführt.
NOT_FOUND (HTTP 404)
Die angeforderte Entität (z. B. ein Fahrzeug, eine Fahrt oder eine Aufgabe) wurde nicht gefunden.
- Ursache: Dieser Fehler tritt in der Regel auf, wenn versucht wird, eine Entität mit einer ID abzurufen, zu aktualisieren oder zu löschen, die nicht in der Datenbank vorhanden ist.
- Abhilfemaßnahmen: Prüfen Sie, ob die Entitäts-ID korrekt ist und ob die Entität erfolgreich erstellt wurde, bevor Sie versuchen, darauf zuzugreifen.
ALREADY_EXISTS (HTTP 409)
Die Entität, die Sie erstellen möchten, ist bereits vorhanden.
- Ursache: Dies wird durch den Aufruf einer Erstellungsmethode (z. B.
CreateVehicleoderCreateTrip) mit einer ID verursacht, die bereits verwendet wird. - Abhilfe: Aktualisieren Sie stattdessen die vorhandene Entität oder verwenden Sie eine neue eindeutige ID für die Erstellungsanfrage.
PERMISSION_DENIED (HTTP 403)
Sie haben nicht die erforderlichen Berechtigungen, um die Anfrage zu bearbeiten.
- Ursache: Dieser Fehler tritt in der Regel auf, wenn in Ihrem JSON Web Token (JWT) die richtigen Ansprüche fehlen oder wenn dem Dienstkonto, mit dem das JWT signiert wird, die erforderlichen IAM-Rollen fehlen. Beispiel: „JWT does not contain a matching scope for requested trip.“ (JWT enthält keinen passenden Bereich für die angeforderte Fahrt.)
- Abhilfemaßnahmen: Prüfen Sie die Berechtigungen Ihres Dienstkontos und stellen Sie sicher, dass Ihre JWT-Anforderungen die richtigen Bereiche für die Einheit enthalten, auf die Sie zugreifen möchten.
INVALID_ARGUMENT (HTTP 400)
Mindestens eines der in der Anfrage übergebenen Argumente ist ungültig.
- Ursache: Das kann verschiedene Gründe haben, z. B. wenn Sie einen Wert außerhalb des zulässigen Bereichs angeben (z. B. die maximale Kapazität), ein erforderliches Feld fehlt (z. B. ein
VehicleType) oder Sie ungültige Koordinaten für einen Abholort angeben. - Abhilfe: Sehen Sie sich die Fehlermeldung für das ungültige Feld an und achten Sie darauf, dass Ihre Anfrage der API-Spezifikation entspricht.
FAILED_PRECONDITION (HTTP 400)
Der Vorgang wurde abgelehnt, weil der Systemzustand nicht für die Ausführung des Vorgangs geeignet ist.
- Ursache: Häufige Ursachen sind der Versuch, den Status einer
COMPLETE- oderCANCELED-Fahrt zu ändern, oder der Versuch, einem Fahrzeug eineCLOSED-Aufgabe zuzuweisen. - Abhilfemaßnahmen: Achten Sie darauf, dass der aktuelle Status der Entität den von Ihnen versuchten Vorgang zulässt. Prüfen Sie die Fehlermeldung auf bestimmte Statusverstöße.
UNAVAILABLE (HTTP 503)
Der Dienst ist nicht verfügbar.
- Ursache: Dies deutet auf ein vorübergehendes Problem mit dem Fleet Engine-Dienst hin.
- Abhilfe: Die Anfrage kann problemlos mit exponentiellem Backoff wiederholt werden.