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