Bu belgede, bir seyahatin nasıl güncelleneceği ve durumunun nasıl yönetileceği açıklanmaktadır. Bu işlem, bir seyahatle ilgili alanları ayarlamak için alan maskesi kullanmayı içerir. Bu kılavuzda, Fleet Engine'i bu sitede açıklandığı şekilde ayarladığınız ve bir geziye atanmış bir araçla çalıştığınız varsayılır.
Gezi güncellemeleriyle ilgili temel bilgiler
Sisteminiz, aşağıdaki durumlarda bir yolculuğu güncellemek için Fleet Engine'i kullanır:
- Oluşturulan bir geziye araç atarken
- Seyahatin durumu değiştiğinde (ör. araç kontrol noktalarından geçtiğinde)
- Yolcu sayısı ve bırakma noktası gibi gezi alanlarını güncellediğinizde
Bir geziyi güncellemek için gRPC ve REST'i kullanarak istek gönderin.
Fleet Engine: Hizmet hesabı rolleri bölümünde açıklandığı gibi, projenizin hizmet hesabıyla ilgili uygun kimlik bilgilerini kullanın.
Seyahat alanlarını güncelleme
Tek hedefli gezi oluşturma bölümündeki Gezi alanları'nda açıklanan gezi alanlarından herhangi birini güncelleyebilirsiniz. Örneğin, bir gezi oluşturduktan sonra önce bir araç bulmak ve ardından geziyi gerçekleştirecek araçla ilişkilendirmek için gezi vehicle_id
alanını güncellemek yaygın bir uygulamadır.
Alan maskelerini kullanma
Alan maskeleri, API çağıranların bir isteğin alması veya güncellemesi gereken alanları listelemesinin bir yoludur. FieldMask kullanmak gereksiz işlemleri önler ve performansı artırır. Fleet Engine, tüm kaynaklardaki alanları güncellemek için alan maskelerini kullanır.
Seyahati araç kimliğiyle güncelleme
Fleet Engine'in aracı rotası boyunca takip edebilmesi için araç kimliğiyle bir gezi yapılandırmanız gerekir. Aşağıdaki kod örneğinde, seyahatin araç kimliğiyle nasıl güncelleneceği gösterilmektedir.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to update.
Trip trip = Trip.newBuilder()
.setVehicleId("8241890")
.build();
// The trip update request.
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder() // No need for the header.
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
.build();
// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Neither the trip nor vehicle exist.
break;
case PERMISSION_DENIED:
break;
}
return;
}
Geziler için gezi durumunu yönetme
TripStatus
numaralandırma değerlerinden birini kullanarak bir seyahatin durumunu belirtirsiniz. Bir seyahatin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP
durumundan ARRIVED_AT_PICKUP
durumuna geçtiğinde) Fleet Engine'deki seyahat durumunu güncellersiniz. Seyahat yaşam döngüsü her zaman NEW
durum değeriyle başlar ve COMPLETE
veya CANCELED
değeriyle sona erer.
Örnek gezi güncellemesi
Aşağıda, Fleet Engine'de arka arkaya yapılan bir yolculuk için yolculuk durumunun nasıl güncelleneceği gösterilmektedir.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to be updated.
Trip trip = Trip.newBuilder()
.setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
.build();
// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
.build();
// Error handling.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid.
break;
case PERMISSION_DENIED:
break;
}
return;
}
Gezileri güncelleme ile ilgili diğer örnekleri Diğer gezi türleri bölümünde görebilirsiniz.
Seyahat hatalarını giderme
Mevcut seyahatleri güncellerken veya bulurken DEADLINE_EXCEEDED
hatasıyla karşılaşabilirsiniz. Bu durumda Fleet Engine'in durumu bilinmez.
Bu durumu araştırmak için önce güncellemeye veya izlemeye çalıştığınız aynı gezi kimliğini kullanarak CreateTrip
adlı kullanıcıyı tekrar arayın. Bu işlem, 201 (CREATED) veya 409 (CONFLICT) yanıtını döndürmelidir. İkinci durumda, önceki istek DEADLINE_EXCEEDED
tarihinden önce başarılı olmuştur.
Tüketici SDK'sındaki ağ hataları listesini (Android veya iOS için) inceleyin.