> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plato.ae/llms.txt
> Use this file to discover all available pages before exploring further.

# Kuyruk ve Redis

> BullMQ kuyrukları, yazıcı yalıtımı, kalıcılık ve Redis modları.

# 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:

```txt theme={null}
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:

```txt theme={null}
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:

```json theme={null}
{
  "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:

```txt theme={null}
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:

```txt theme={null}
--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:

```json theme={null}
{
  "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.
