اگر با مشکلی مواجه شدید، برای دریافت راهنمایی بخشهای زیر را بررسی کنید.
وضعیت گمشده در Fleet Engine
هنگام کار با Fleet Engine، پیادهسازی خود را طوری طراحی کنید که خرابیها را پیشبینی کند. برای مثال، اگر درخواستی برای بهروزرسانی وسیله نقلیه به Fleet Engine ارسال کنید، ممکن است با خطایی پاسخ دهد که نشان میدهد وسیله نقلیه وجود ندارد. سپس پیادهسازی شما باید خودرو را در وضعیت جدید بازآفرینی کند.
در سناریوی بسیار نامحتمل خرابی فاجعهبار Fleet Engine، ممکن است لازم باشد اکثر یا همه خودروها و تکالیف را دوباره ایجاد کنید. اگر نرخ ایجاد خیلی بالا برود، ممکن است برخیاز درخواستها بهدلیل مشکلات سهمیه دوباره ناموفق شوند، زیرا بررسیهای سهمیه برای جلوگیری از حملات انکار سرویس (DOS) انجام میشود. در این حالت، نرخ بازآفرینی را بااستفاده از راهبرد عقبنشینی برای تلاشهای مجدد کاهش دهید.
تلاشهای مجدد
مطمئن شوید که سیستم شما درخواستهای Fleet Engine را تکرار میکند، زیرا ممکن است گاهی اوقات ناموفق باشند. کتابخانههای کارخواه Fleet Engine بهطور پیشفرض درخواستهای مجدد را صادر میکنند.
وضعیت گمشده در برنامه راننده
اگر برنامه راننده ازکار بیفتد، برنامه باید وضعیت فعلی را در Driver SDK بازسازی کند. برنامه باید تلاش کند تکالیف را دوباره ایجاد کند تا مطمئن شود که وجود دارند و وضعیت فعلی آنها را بازیابی کند. برنامه باید فهرست ایستگاهها را برای Driver SDK بازسازی و بهطور صریح تنظیم کند.
توجه: این بازیابیها باید بهطور مستقل و بدون تکیه بر اطلاعات Fleet Engine انجام شوند، بهجز خطاهایی که نشان میدهند آیا و چه زمانی یک موجودیت ازقبل در پایگاه داده وجود دارد. اگر موجودیت ازقبل وجود داشته باشد، آن خطا میتواند جذب شود و موجودیت بااستفاده از شناسه آن بهروز شود.
خطاهای «مهلت تمام شد»
اگر هنگام تماس با Fleet Engine خطای DEADLINE_EXCEEDED دریافت کردید، درخواست
بیشتر از زماناتمام پیکربندیشده طول کشیده است. کتابخانههای کارخواه Fleet Engine دارای
زمانهای اتمام پیشفرض هستند، اما ممکن است لازم باشد آنها را تنظیم کنید.
برای اطلاعات کلی درباره مهلتهای gRPC، به gRPC و مهلتها مراجعه کنید.
برای پیکربندی مهلت هنگام استفاده از کتابخانه کارخواه Fleet Engine Java، میتوانید تنظیمات تکرار RPC را اصلاح کنید. مثال زیر نحوه پیکربندی
زمان استراحت سفارشی را هنگام راهاندازی 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());
خطاهای رایج میانای برنامهسازی کاربردی
این بخش خطاهای رایج میانای برنامهسازی کاربردی را که ممکن است با آنها مواجه شوید، دلایل آنها، و نحوه حلوفصل کردن آنها را فهرست میکند.
NOT_FOUND (HTTP 404)
نهاد درخواستی (مثل خودرو، سفر، یا تکلیف) پیدا نشد.
- علت: معمولاً بهدلیل تلاش برای دریافت، بهروزرسانی، یا حذف یک موجودیت بااستفاده از شناسهای که در پایگاه داده وجود ندارد ایجاد میشود.
- اصلاح: پیشاز تلاش برای دسترسی به شناسه نهاد، بررسی کنید که شناسه نهاد درست باشد و نهاد با موفقیت ایجاد شده باشد.
ALREADY_EXISTS (HTTP 409)
موجودیتی که میخواهید ایجاد کنید ازقبل وجود دارد.
- علت: بهدلیل فراخوانی روش ایجاد (مانند
CreateVehicleیاCreateTrip) با شناسهای که قبلاً استفاده شده است. - اصلاح: بهجای آن، نهاد موجود را بهروز کنید یا از شناسه یکتای جدیدی برای درخواست ایجاد استفاده کنید.
PERMISSION_DENIED (HTTP 403)
اجازههای لازم را برای تکمیل درخواست ندارید.
- علت: این مشکل معمولاً زمانی رخ میدهد که «ژتون وب JSON» (JWT) شما فاقد ادعاهای صحیح باشد، یا حساب سرویسی که JWT را امضا میکند فاقد نقشهای IAM لازم باشد. برای مثال، «JWT حاوی دامنه منطبقی برای سفر درخواستشده نیست.»
- اصلاح: اجازههای «حساب سرویس» خود را بررسی کنید و مطمئن شوید که ادعاهای JWT شما شامل دامنههای صحیح برای موجودیتی است که میخواهید به آن دسترسی پیدا کنید.
INVALID_ARGUMENT (HTTP 400)
یک یا چند متغیر مستقل ارسالشده در درخواست نامعتبر است.
- علت: این مشکل ممکن است بهدلایل مختلفی رخ دهد، مثلاً ارائه مقدار خارج از محدوده (مانند حداکثر ظرفیت)، نبودن فیلد الزامی (مانند
VehicleType)، یا ارائه مختصات نامعتبر برای نقطه تحویل. - اصلاح: پیام خطا را برای فیلد خاصی که نامعتبر است مرور کنید و مطمئن شوید درخواستتان با مشخصات میانای برنامهسازی کاربردی مطابقت دارد.
FAILED_PRECONDITION (HTTP 400)
عملیات رد شد زیرا سیستم در وضعیت لازم برای اجرای عملیات نیست.
- علت: علتهای رایج شامل تلاش برای تغییر سفر
COMPLETEیاCANCELEDبه ایالت دیگر، یا تلاش برای اختصاص دادن تکلیفCLOSEDبه خودرو است. - اصلاح: مطمئن شوید وضعیت فعلی نهاد اجازه عملیاتی را که میخواهید انجام دهید میدهد. پیام خطا را برای موارد نقض خاص ایالت بررسی کنید.
UNAVAILABLE (HTTP 503)
سرویس دردسترس نیست.
- علت: این خطا نشاندهنده مشکلی گذرا در سرویس Fleet Engine است.
- اصلاح: درخواست را میتوان با عقبگرد نمایی بهطور ایمن دوباره امتحان کرد.