이 문서에서는 이동을 업데이트하고 이동 상태를 관리하는 방법을 설명합니다. 필드 마스크를 사용하여 이동 관련 필드를 설정하는 작업이 포함됩니다. Kubernetes는 이 사이트에 설명된 대로 Fleet Engine을 설정했으며 이동에 할당된 차량입니다.
경로 업데이트 기본사항
다음과 같은 경우 시스템에서 Fleet Engine을 사용하여 이동을 업데이트합니다.
- 차량을 만든 후 이동에 할당하는 경우
- 이동 상태가 변경되는 경우 예를 들어 차량이 통과합니다.
- 승객 수와 수 있습니다.
이동을 업데이트하려면 gRPC 및 REST를 사용하여 요청을 보냅니다.
프로젝트의 서비스 계정에 적절한 사용자 인증 정보를 Fleet Engine: 서비스 계정 역할에 설명되어 있습니다.
이동 필드 업데이트
만들기의 이동 필드에 설명된 이동 필드를 업데이트할 수 있습니다.
단일 목적지 경로를 얻지 못할 수 있습니다. 예를 들어 이동을 만든 후에는 일반적으로
먼저 차량을 찾은 다음 이동 vehicle_id
필드를
이동을 수행할 차량과 연결할 수 있습니다.
필드 마스크 사용
필드 마스크는 API 호출자가 요청이 처리해야 하는 필드를 나열하는 방법입니다. 또는 업데이트할 수 있습니다. FieldMask 사용 불필요한 작업을 방지하고 성능을 개선합니다. Fleet Engine은 필드 마스크를 사용합니다. 모든 리소스의 필드를 업데이트하기 위한 용도입니다.
차량 ID로 이동 업데이트
Fleet Engine이 추적할 수 있도록 차량 ID로 이동을 구성해야 합니다. 차량을 자동으로 이동할 수 있습니다. 다음 코드 샘플은 차량 ID로 이동을 업데이트합니다.
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;
}
이동의 이동 상태 관리
TripStatus
열거형 중 하나를 사용하여 이동 상태를 지정합니다.
값으로 사용됩니다. 이동의 상태가 변경되는 경우 예를 들어 ENROUTE_TO_PICKUP
부터
ARRIVED_AT_PICKUP
인 경우 Fleet Engine에서 이동 상태를 업데이트합니다. 여행
수명 주기는 항상 NEW
상태 값으로 시작하고
COMPLETE
또는 CANCELED
입니다.
경로 업데이트 예시
다음은 연달아 이동을 위해 이동 상태를 업데이트하는 방법을 보여줍니다. 여러 옵션을 살펴보겠습니다
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;
}
경로를 업데이트하는 방법에 대한 다른 예는 기타 경로 유형에서 확인할 수 있습니다. 섹션으로 이동합니다.
경로 오류 처리
기존 경로를 업데이트하거나 찾을 때
DEADLINE_EXCEEDED
오류: Fleet Engine의 상태를 알 수 없는 경우
이 문제를 조사하려면 먼저 동일한 이동 ID를 사용하여 CreateTrip
를 다시 호출하세요.
있습니다. 201 (CREATED) 또는
409 (CONFLICT). 후자의 경우 이전 요청이
DEADLINE_EXCEEDED
소비자 SDK의 네트워크 오류 목록(Android용 또는 iOS