"Olay Otobüsü" (Event Bus) deseni, sistem bileşenleri arasında iletişimi, olayların yayınlanması ve dinlenmesi yoluyla gerçekleştirmeyi sağlayan bir mimari yaklaşımdır. Bu bağlamda bileşenler, birbirleri hakkında doğrudan bilgiye sahip değildir ve "yayıncı-abone" prensibiyle gevşek bağlı bir etkileşim gerçekleşir.
Kullanım: Bu desen, çok sayıda modül arasında ölçeklenebilir, genişletilebilir etkileşimi sağlamak gerektiğinde faydalıdır — örneğin, karmaşık web uygulamaları, masaüstü sistemler, mikro hizmet platformlarında.
pyee kütüphanesi ile Python’da kod örneği:
from pyee import EventEmitter bus = EventEmitter() def on_user_created(user): print(f"Kullanıcı oluşturuldu: {user}") bus.on('user_created', on_user_created) bus.emit('user_created', {"id": 1, "name": "Ivan"})
Temel Özellikler:
Event Bus’ta tüm olayların kalıcı olması mı gereklidir?
Hayır, zorunlu değildir. Çoğu durumda, Event Bus, saklanmayan geçici (ephemeral) olaylarla çalışır. Olay kaybını önlemenin önemli olduğu durumlarda kalıcılık gereklidir (örneğin, Kafka üzerinden).
Hiçbir abone, yayın sırasında kayıtlı değilse olay kaybolur mu?
Evet, sistem olayları saklamıyorsa (geçici), olay kaybolacaktır. Garantili teslimat için kalıcı bir Event Bus’a ihtiyaç vardır (örneğin, kalıcı kuyruklarıyla RabbitMQ).
Tek bir Event Bus, senkron ve asenkron kodlar için sınırsız şekilde kullanılabilir mi?
Hayır, senkron Event Bus, tüm işleyiciler tamamlanana kadar akışı engelleyebilir, bu yüksek yük için kabul edilemez. Ölçeklenebilir sistemler için asenkron Event Bus kullanılır veya olay işleme ayrı süreçlerde/iş parçacıklarında gerçekleştirilir (örneğin, Celery aracılığıyla).