عیب‌یابی کردن مسائل رایج

اگر با مشکلی مواجه شدید، برای دریافت راهنمایی بخش‌های زیر را بررسی کنید.

وضعیت گم‌شده در 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 است.
  • اصلاح: درخواست را می‌توان با عقب‌گرد نمایی به‌طور ایمن دوباره امتحان کرد.