lilydocs
HTTP APIWebSocketConsumer
RabbitMQ3 dk okuma

Eşzamanlılık ve kapasite

Concurrency, prefetch, process buffer ve broker retention sınırlarını ayrı yöneterek kapasiteyi boyutlandırın.

Consumer kapasitesi tek bir sayıyla belirlenmez. Broker’ın teslim edebildiği unacknowledged mesajlar, process’in beklettiği delivery’ler ve eşzamanlı çalışan işler farklı kaynak tüketir. Her fiziksel queue kendi planını taşır; replica sayısı toplam kapasiteyi ayrıca artırır.

Üç kontrolü birlikte düşünün#

TOML
# Fields in an existing queue entry, before its retention table.
concurrency = 4
prefetch_count = 10
delivery_buffer_capacity = 6
max_message_size_bytes = 1048576
Alan Etkisi Sınır
concurrency Queue dispatcher’ının eşzamanlı execution task/permit sayısı 1–1024; varsayılan 1
prefetch_count Subscription’ın RabbitMQ QoS unacked penceresi 1–4096; varsayılan 10
delivery_buffer_capacity Receiver ile dispatcher arasındaki bounded buffer 1–prefetch; verilmezse prefetch
max_message_size_bytes Body kabul sınırı 1 byte–16 MiB; varsayılan 1 MiB

Bu örnek dört execution slot’u ve en çok on unacked mesajlık broker penceresi tanımlar; dört ayrı subscription açmaz. Prefetch concurrency ile gizlice çarpılmaz. Buffer boyutu broker queue retention’ının veya bütün process belleğinin üst sınırı değildir.

Backpressure nerede oluşur?#

Execution slot’ları dolduğunda dispatcher yeni delivery başlatmayı bekletir. Yalnız semaphore’ın uyanması yeni iş başlatmak için yeterli değildir; tamamlanan task sonucunu da gözler. Terminal runtime hatası varsa yeni handler başlatmadan mevcut ownership’i uzlaştırır.

Broker stream kaybında recovery önce eski subscription generation’ının task/channel termination kanıtını bekler. Ardından yeni subscription kurulur. Bu davranış kopmuş bir bağlantının arkasında sessizce ikinci aktif owner biriktirilmesini engellemeyi amaçlar; network kesintisinde tam kesintisiz işleme sözü değildir.

Body sınırı ve retention#

Limit üstü body normal pipeline’a alınmaz ve uygulama için clone/decode edilmeden non-requeueing broker NACK/dead-letter yoluna gider. Bu, uygulamanın confirmed DLQ handoff’uyla aynı kanıt değildir. Boyut kontrolü yapılana kadar transport’un body’yi almış olabileceğini hesaba katın; limit process RSS kotası değildir.

Broker ready mesaj kapasitesi retention ile sınırlanır. Retry bucket sayısını da hesaba katın: her bucket kendi retention bütçesini taşır. Ortalama body boyutu, payload decode genişlemesi, dış connection pool’ları ve işlem süresi toplam kapasite hesabının parçalarıdır.

Sıralama ve throughput beklentisi#

concurrency=10, saniyede on mesaj anlamına gelmez. Çoklu slot, replica, retry ve broker redelivery tamamlanma sırasını değiştirebilir. Tek aktif consumer seçeneği uygulama içindeki concurrency’yi otomatik bire indirmez. Kesin domain sırası gereken işlerde veri modelini ve bölümlendirmeyi buna göre tasarlayın.

Üretim ayarlarını gerçek iş süresi ve operational snapshot gözlemleriyle seçin. Daha büyük prefetch’in her iş yükünde daha yüksek throughput vereceğini varsaymayın; daha fazla kabul edilmiş iş shutdown ve bellek ihtiyacını da etkiler.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod