Ana içeriğe atla

Kuyruk ve Redis

Sürücü Redis ve BullMQ’yi kullanır, böylece yazdırma işleri süreç hatalarından ve yazıcı kesintilerinden kurtulur.

Yazıcı Başına Kuyruklar

Her benzersiz ip_address:port, özel bir PrinterStore alır. Örneğin:
192.168.1.50:9100 -> pc-printer_192_168_1_50_9100
192.168.1.51:9100 -> pc-printer_192_168_1_51_9100
Her mağazanın sahibi:
  • Bir BullMQ sırası.
  • Bir BullMQ çalışanı.
  • Bir kuyruk olayı dinleyicisi.
  • Bir yazıcı durumu önbelleği.
  • Bir soket yaşam döngüsü denetleyicisi.
Çalışan eşzamanlılığı 1’dir, dolayısıyla bir yazıcı hiçbir zaman aynı anda iki iş almaz. Her yazıcının kendi çalışanı olduğundan farklı yazıcılar paralel olarak işleyebilir.

Yazıcı Kaydı

Bilinen yazıcılar Redis setinde saklanır:
pc-printer:printers
Başlangıçta, restorePersistedStores() seti okur, depoları yeniden oluşturur ve başarısız olan işleri yeniden dener.

Davranışı Yeniden Dene

Varsayılan kuyruk seçenekleri:
{
  "attempts": 2147483647,
  "backoff": {
    "type": "fixed",
    "delay": 5000
  },
  "removeOnComplete": true,
  "removeOnFail": false
}
Bu şu anlama gelir:
  • Tamamlanan işler kaldırılır.
  • Başarısız olan işler korunur.
  • Başarısız işler sabit geri çekilmeyle yeniden denenir.
  • Varsayılan maxAttempts sonsuza kadar etkili bir şekilde yeniden dener.

Planlanmış İşler

POST /print, runAt’yi kabul eder. runAt gelecekteyse sürücü işi BullMQ gecikmesiyle ekler. Gelecekteki bir zamanlama için gecikmiş bir iş oluşturulduysa kurtarma mantığı bunu erken desteklemez. Kabul edilen runAt formları:
  • Milisaniyelik zaman damgası numarası.
  • Sayısal dize.
  • Date.parse()’nin ayrıştırabileceği tarih dizesi.

Kuyruk Durumu

GET /queue-status bilinen tüm mağazaları bir araya getirir:
  • waiting
  • active
  • delayed
  • failed
  • completed
  • totalPending
  • isProcessing
totalPending, tüm mağazalarda waiting + delayed’dir.

Gömülü Redis

Katıştırılmış mod Redis’den redis-memory-server’ye kadar başlar. Windows’ta sürücü istenen Redis ikili dosyasını kontrol eder veya indirir:
redis-binaries/<version>/Redis-<version>-Windows-x64-msys2/redis-server.exe
Gerçek çalışan Redis sürümü başlatma sonrasında kontrol edilir. Algılanan sürüm config.redis.version’ye eşit değilse başlatma iptal edilir.

Disk Senkronizasyonu

redis.diskSync doğru olduğunda, Redis anlık görüntü ayarlarıyla başlar:
--save <snapshotIntervalSec> 1
--appendonly no
--dir <app-root>
--dbfilename dump.rdb
Sorunsuz kapatma durumunda, sürücü Redis SAVE girişiminde bulunur. Yeniden başlatmalardan kurtulmak için kuyruklara ve bilinen yazıcılara ihtiyaç duyduğunuzda disk senkronizasyonunu kullanın.

Harici Redis

Harici mod Redis’yi başlatmıyor veya durdurmuyor. Sürücü şunları kullanır:
{
  "mode": "external",
  "host": "127.0.0.1",
  "port": 6379,
  "db": 0,
  "username": "",
  "password": ""
}
Bir mağaza zaten Redis’yi yönetiyorsa veya birden fazla sürücü işlemi paylaşılan kuyruk durumuna ihtiyaç duyuyorsa harici Redis’yi kullanın. Operasyonel model açık olmadığı sürece iki aktif sürücüyü aynı fiziksel yazıcıya yönlendirmekten kaçının.