Bu belgede, bir gezinin nasıl güncelleneceği ve durumunun nasıl yönetileceği açıklanmaktadır. Bu işlem, bir gezi için ilgili alanları ayarlamak üzere alan maskesi kullanmayı içerir. 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üncellemesiyle ilgili temel bilgiler
Sisteminiz, aşağıdaki durumlarda bir geziyi güncellemek için Filo Motoru'nu kullanır:
- Oluşturulduktan sonra bir geziye araç atarken.
- Gezinin durumu değiştiğinde (ör. araç, yol 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 veya REST kullanarak istek gönderin.
Fleet Engine: Hizmet hesabı rolleri bölümünde açıklandığı gibi projenizin hizmet hesabı için uygun kimlik bilgilerini kullanın.
Gezi alanlarını güncelleme
Tek varış noktalı 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ğrısı yapanların bir isteğin döndürmesi veya güncellemesi gereken alanları listelemesine olanak tanır. FieldMask kullanmak, gereksiz işlemleri önler ve performansı artırır. Fleet Engine, tüm kaynaklardaki alanları güncellemek için alan maskeleri kullanır.
Geziyi araç kimliğiyle güncelleme
Fleet Engine'in aracı rotası boyunca takip edebilmesi için geziyi bir araç kimliğiyle yapılandırmanız gerekir. Aşağıdaki kod örneğinde, gezinin 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 gezinin durumunu belirtirsiniz. Bir gezinin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP durumundan ARRIVED_AT_PICKUP durumuna geçtiğinde) Fleet Engine'de gezi durumunu güncellersiniz. Gezi yaşam döngüsü her zaman NEW durum değeriyle başlar ve COMPLETE veya CANCELED değeriyle biter.
Örnek gezi güncellemesi
Aşağıda, Fleet Engine'de arka arkaya yapılan bir gezinin gezi 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üncellemenin diğer örneklerini Diğer gezi türleri bölümünde görebilirsiniz.
Gezi hatalarını giderme
Mevcut gezileri güncellerken veya bulurken DEADLINE_EXCEEDED hatasıyla karşılaşabilirsiniz. Bu durumda Fleet Engine'in durumu bilinmiyordur.
Bu sorunu araştırmak için önce güncellemeye veya izlemeye çalıştığınız gezi kimliğini kullanarak CreateTrip yöntemini tekrar çağırın. Bu işlem 201 (CREATED) veya 409 (CONFLICT) döndürmelidir. İkinci durumda, önceki istek DEADLINE_EXCEEDED tarihinden önce başarılı olmuştur.
Tüketici SDK'sındaki ağ hatalarının listesini Android veya iOS için inceleyin.