الانتقال إلى المحتوى الرئيسي

قائمة الانتظار وRedis

يستخدم برنامج التشغيل Redis وBullMQ حتى تنجو مهام الطباعة من أخطاء العملية وانقطاع الطابعة.

قوائم الانتظار لكل طابعة

كل ip_address:port فريد يحصل على PrinterStore مخصص. على سبيل المثال:
192.168.1.50:9100 -> pc-printer_192_168_1_50_9100
192.168.1.51:9100 -> pc-printer_192_168_1_51_9100
يمتلك كل متجر:
  • قائمة انتظار BullMQ واحدة.
  • عامل واحد BullMQ.
  • مستمع أحداث قائمة الانتظار واحد.
  • ذاكرة تخزين مؤقت واحدة لحالة الطابعة.
  • وحدة تحكم دورة حياة مقبس واحد.
التزامن العامل هو 1، لذا لا تتلقى طابعة واحدة مطلقًا مهمتين في نفس الوقت. يمكن للطابعات المختلفة أن تقوم بالمعالجة بالتوازي، لأن كل طابعة لها العامل الخاص بها.

سجل الطابعة

يتم تخزين الطابعات المعروفة في مجموعة Redis:
pc-printer:printers
عند بدء التشغيل، يقوم restorePersistedStores() بقراءة المجموعة وإعادة إنشاء المخازن وإعادة محاولة المهام الفاشلة.

إعادة محاولة السلوك

خيارات قائمة الانتظار الافتراضية:
{
  "attempts": 2147483647,
  "backoff": {
    "type": "fixed",
    "delay": 5000
  },
  "removeOnComplete": true,
  "removeOnFail": false
}
هذا يعنى:
  • تتم إزالة المهام المكتملة.
  • يتم الاحتفاظ بالوظائف الفاشلة.
  • إعادة محاولة المهام الفاشلة مع التراجع الثابت.
  • يقوم maxAttempts بإعادة المحاولة بشكل فعال إلى الأبد.

الوظائف المجدولة

POST /print يقبل runAt. إذا كان runAt في المستقبل، يقوم السائق بإضافة المهمة مع تأخير BullMQ. إذا تم إنشاء مهمة متأخرة لجدول مستقبلي، فلن يقوم منطق الاسترداد بترقيتها مبكرًا. نماذج runAt المقبولة:
  • رقم الطابع الزمني بالميلي ثانية.
  • سلسلة رقمية.
  • سلسلة التاريخ التي يمكن لـ Date.parse() تحليلها.

حالة قائمة الانتظار

يجمع GET /queue-status جميع المتاجر المعروفة:
  • waiting
  • active
  • delayed
  • failed
  • completed
  • totalPending
  • isProcessing
totalPending هو waiting + delayed في جميع المتاجر.

جزءا لا يتجزأ من Redis

يبدأ الوضع المضمن من Redis إلى redis-memory-server. في نظام التشغيل Windows، يقوم برنامج التشغيل بفحص أو تنزيل الملف الثنائي Redis المطلوب:
redis-binaries/<version>/Redis-<version>-Windows-x64-msys2/redis-server.exe
يتم التحقق من إصدار Redis قيد التشغيل الفعلي بعد بدء التشغيل. إذا كان الإصدار الذي تم اكتشافه لا يساوي config.redis.version، فسيتم إلغاء بدء التشغيل.

مزامنة القرص

عندما يكون redis.diskSync صحيحًا، يبدأ Redis بإعدادات اللقطة:
--save <snapshotIntervalSec> 1
--appendonly no
--dir <app-root>
--dbfilename dump.rdb
عند إيقاف التشغيل بسلاسة، يحاول السائق إجراء Redis SAVE. استخدم مزامنة القرص عندما تحتاج إلى قوائم الانتظار والطابعات المعروفة للبقاء على قيد الحياة عند إعادة التشغيل.

خارجي Redis

الوضع الخارجي لا يبدأ أو يوقف Redis. يستخدم السائق:
{
  "mode": "external",
  "host": "127.0.0.1",
  "port": 6379,
  "db": 0,
  "username": "",
  "password": ""
}
استخدم Redis الخارجي عندما يكون المتجر قد قام بالفعل بإدارة Redis أو عندما تحتاج عمليات برنامج التشغيل المتعددة إلى حالة قائمة انتظار مشتركة. تجنب توجيه برنامجي تشغيل نشطين إلى نفس الطابعات الفعلية ما لم يكن النموذج التشغيلي واضحًا.